在熊猫数据框中分组列数据

在熊猫数据框中分组列数据

问题描述:

我有一个包含许多列的熊猫数据框(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 

接着我可以使用GROUPBYpd.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来获取它。但困惑,累坏了吧:(

使用熊猫功能欣赏解决方案只

+0

你的“伪数据”并不具有5列,所以你的'df_length'功能将无法正常工作 – asongtoruin

您可以GROUPBY Source添加新列MultiIndex DataFrame,然后通过MultiIndexunstack末级列的重塑:

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 
+1

我会使用数据透视表建议,但这是非常BETT呃。干得不错! – asongtoruin

+0

非常感谢。有用!但是,请您解释一下代码,它是如何工作的,因为我可能会面临一些其他类似的数据分组问题。 –