簡體   English   中英

從DataFrameGroupBy對象創建列表的列

[英]Create columns of lists from DataFrameGroupBy object

我想在多個列表中創建一個groupby數據框和組行:我有以下數據框:

list_date    = [1,1,2,2,2,3,3,3,4,5]
list_request = [2,2,2,3,3,2,3,3,3,3]
list_users   = [1,3,7,1,7,3,4,9,7,9]
list_count   = [1,1,2,3,1,3,1,2,1,1]
df = pd.DataFrame({'date':list_date,'request':list_request,'users':list_users, 'count':list_count})

count  date  request  users
0      1     1        2      1
1      1     1        2      3
2      2     2        2      7
3      3     2        3      1
4      1     2        3      7
5      3     3        2      3
6      1     3        3      4
7      2     3        3      9
8      1     4        3      7
9      1     5        3      9

並且我想得到以下結果(按['date','request']分組):

count       date  request   users
0  [1, 1]     1        2  [1, 3]
1     [2]     2        2     [7]
2  [3, 1]     2        3  [1, 7]
3     [3]     3        2     [3]
4  [1, 2]     3        3  [4, 9]
5     [1]     4        3     [7]
6     [1]     5        3     [9]

如果我在這里使用解決方案: 在pandas groupby中對列表中的行進行分組,我可以創建1個列表,但如何同時創建2個列表呢? 就像是 :

df = df.groupby(['date','request'])['users','count'].apply(list).reset_index()

我需要高效的東西,因為實際上我有數百萬行...

謝謝!

您可以應用pd.Series ,然后重命名您的列:

In [299]: df.groupby(['date', 'request']).apply(lambda x: pd.Series((x['count'].tolist(), x['users'].tolist()))).reset_index().rename(columns={0 : 'count', 1 : 'users'})
Out[299]: 
   date  request   count   users
0     1        2  [1, 1]  [1, 3]
1     2        2     [2]     [7]
2     2        3  [3, 1]  [1, 7]
3     3        2     [3]     [3]
4     3        3  [1, 2]  [4, 9]
5     4        3     [1]     [7]
6     5        3     [1]     [9]

另一個解決方案是使用df.apply應用列表:

In [364]: grouped_df = df.groupby(['date', 'request'])

In [365]: pd.DataFrame({ 'count' : grouped_df['count'].apply(list), 'users' : grouped_df['users'].apply(list) }).reset_index() #, columns=['count', 'users'])
Out[365]: 
   date  request   count   users
0     1        2  [1, 1]  [1, 3]
1     2        2     [2]     [7]
2     2        3  [3, 1]  [1, 7]
3     3        2     [3]     [3]
4     3        3  [1, 2]  [4, 9]
5     4        3     [1]     [7]
6     5        3     [1]     [9]

可能在這里看到更好的解決方案(我問了一個問題): 將DataFrameGroupBy對象中的每個分組列轉換為一個列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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