我有一个包含许多列的熊猫数据框(df)。为简单起见,我在这里发布了三列虚拟数据。
Timestamp Source Length
0 1 5
1 1 5
2 1 5
3 2 5
4 2 5
5 3 5
6 1 5
7 3 5
8 2 5
9 1 5
使用Panda函数,首先我将时间戳设置为df的索引。
index = pd.DatetimeIndex(data[data.columns[1]]*10**9) # Convert timestamp
df = df.set_index(index) # Set Timestamp as index
接下来,我可以使用 groupby 和 pd.TimeGrouper 函数将数据分组到5秒的分档中,并计算每个分箱的累积长度,如下所示:
df_length = data[data.columns[5]].groupby(pd.TimeGrouper('5S')).sum()
因此 df_length 数据框应如下所示:
Timestamp Length
0 25
5 25
现在的问题是:“我希望获得相同的5秒钟,但是我想获得以下格式在不同列中计算每个源(1,2和3)的累积长度:
Timestamp 1 2 3
0 15 10 0
5 10 5 10
我想我可以在某些条件下使用df.groupby来获取它。但现在感到困惑和疲惫:(
仅使用熊猫功能欣赏解决方案。
答案 0 :(得分:1)
您可以为Source
的group MultiIndex DataFrame
添加新列,然后按unstack
的最后一级MultiIndex
重新设置列:
print (df[df.columns[2]].groupby([pd.TimeGrouper('5S'), df['Source']]).sum())
Timestamp Source
1970-01-01 00:00:00 1 15
2 10
1970-01-01 00:00:05 1 10
2 5
3 10
Name: Length, dtype: int64
df1 = df[df.columns[2]].groupby([pd.TimeGrouper('5S'), df['Source']])
.sum()
.unstack(fill_value=0)
print (df1)
Source 1 2 3
Timestamp
1970-01-01 00:00:00 15 10 0
1970-01-01 00:00:05 10 5 10