[英]Grouping column data in Pandas Dataframes
我有一個包含許多列的 Panda 數據框 (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 秒的 bin 並計算每個 bin 的累積長度,如下所示:
df_length = data[data.columns[5]].groupby(pd.TimeGrouper('5S')).sum()
所以df_length數據幀應該是這樣的:
Timestamp Length
0 25
5 25
現在的問題是:“我想獲得 5 秒的相同 bin,但螞蟻要按以下格式計算單獨列中每個源(1,2 和 3)的累積長度:
Timestamp 1 2 3
0 15 10 0
5 10 5 10
我想我可以在某些條件下使用 df.groupby 來獲取它。 但是現在迷茫又累:(
僅使用熊貓函數欣賞解決方案。
您可以為多MultiIndex DataFrame
groupby Source
添加新列,然后通過MultiIndex
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.