我是Python的新手,想要使用pandas创建一个类似于这个的数据库。
以下是我df的简化版本:
Timestamp A B C
0 2013-02-01 1 0 0
1 2013-02-02 2 10 18
2 2013-02-03 3 0 19
3 2013-02-04 4 12 20
4 2013-02-05 0 13 21
5 2013-02-06 6 14 22
6 2013-02-07 7 15 23
7 2013-02-08 0 0 0
我首先做的事情是使用以下代码创建一个新的空数据框来存储数据:
# Create frequent pattern source database
df_frequent_pattern = pd.DataFrame(columns = ["Start Time", "End Time", "Active Appliances"])
# Create start_time and end_time series using pd.date_range
df_frequent_pattern["Start Time"] = pd.date_range("2013-02-1", "2013-02-08", freq = "D")
df_frequent_pattern["End Time"] = pd.date_range("2013-02-2", "2013-02-09", freq = "D")
这将产生以下输出:
Start Time End Time Active Appliances
0 2013-02-01 2013-02-02 NaN
1 2013-02-02 2013-02-03 NaN
2 2013-02-03 2013-02-04 NaN
3 2013-02-04 2013-02-05 NaN
4 2013-02-05 2013-02-06 NaN
5 2013-02-06 2013-02-07 NaN
6 2013-02-07 2013-02-08 NaN
7 2013-02-08 2013-02-09 NaN
基于这个和这个 Stack Overflow post,我编写了以下代码将电器分配到正确的时间分辨率:
# Add the data to the correct 'active' period based on interval and merge the active appliances in the "active appliances column"
# Row counter for the loop
rows = 8
for row in range(rows):
# Check if appliance is active during time resoltuion
if df_frequent_pattern["Start Time"] <= df["Timestamp"] | df["Timestamp" <= df_frequent_pattern["End Time"]:
# Add all the appliance active during the time resolution to the column as a string value (e.g. "A, B, C")
df_frequent_pattern["Active Appliances"] = df["A", "B", "C"].apply(lambda row: '_'.join(row.values.astype(str)), axis = 1)
很不幸,代码不能运行,我得到了以下错误
df_frequent_pattern["Active Appliances"] = df["A", "B", "C"].apply(lambda row: '_'.join(row.values.astype(str)), axis = 1)
^
SyntaxError: invalid syntax
然而,根据第二篇帖子,'='似乎被放置得正确。您有什么想法可以使用df来获得如上所示的预期结果吗?
应该像这样:
Start Time End Time Active Appliances
0 2013-02-01 2013-02-02 "A"
1 2013-02-02 2013-02-03 "A,B,C"
2 2013-02-03 2013-02-04 "A,C"
3 2013-02-04 2013-02-05 "A,B,C"
4 2013-02-05 2013-02-06 "A,B,C"
5 2013-02-06 2013-02-07 "A,B,C"
6 2013-02-07 2013-02-08 "A,B,C"
7 2013-02-08 2013-02-09 ""
df[["A", "B", "C"]].astype(str).agg('_'.join,1)
。 - Umar.H1
的值都是活动设备,但对于3-4
。 - Umar.H