簡體   English   中英

在 Pandas Dataframes 中對列數據進行分組

[英]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

接下來,我可以使用groupbypd.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM