在熊猫数据框中分组列数据
我有一个包含许多列的熊猫数据框(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
使用熊猫函数,首先我设置时间戳作为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 dataframe应该看起来像:
Timestamp Length
0 25
5 25
现在的问题是:“我想获得的5秒同一箱,但蚂蚁计算每个源(1,2和3)在单独的列以下列格式的累计长度:
Timestamp 1 2 3
0 15 10 0
5 10 5 10
我想我可以在某些条件下使用df.groupby来获取它。但困惑,累坏了吧:(
使用熊猫功能欣赏解决方案只
您可以GROUPBY Source
添加新列MultiIndex DataFrame
,然后通过MultiIndex
unstack
末级列的重塑:
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
我会使用数据透视表建议,但这是非常BETT呃。干得不错! – asongtoruin
非常感谢。有用!但是,请您解释一下代码,它是如何工作的,因为我可能会面临一些其他类似的数据分组问题。 –
你的“伪数据”并不具有5列,所以你的'df_length'功能将无法正常工作 – asongtoruin