Pandas dataframe, groupBy聚合多列多行
Pandas dataframe, groupBy aggregate multiple columns and rows
我有一个 pandas DataFrame,如下所示:
supply_area transaction_date price
0 54.98 2006-03-31 48500.0
0 54.98 2006-04-30 48500.0
0 54.98 2006-05-31 48500.0
1 67.28 2006-01-31 54500.0
1 67.28 2006-02-28 54500.0
1 67.28 2006-03-31 54500.0
我想按 supply_area 分组,其中有一列连接 transaction_date 和价格,如下所示:
supply_area transaction_date_price price
0 54.98 2006-03-31,48500.0,2006-04-30,48500.0,2006-05-31,48500.0
1 67.28 2006-01-31,54500.0,2006-02-28,54500.0,2006-03-31,54500.0
我试过这个和其他一些东西,但它不起作用。
df = df.groupby('supply_area').agg(
{'supply_area': 'first', 'transaction_date': ','.join, 'price': ','.join})
我对 python 和 pandas 库还很陌生,所以我不确定我想要的是否可行。
提前致谢!
您可以使用第一个连接创建一个新列(此处称为“已连接”,但任何名称都可以),然后连接到 groupby:
df['joined'] = (df['transaction_date'] + ',' + df['price'].astype(str))
df.groupby('supply_area', as_index=False)['joined'].apply(','.join)
输出:
supply_area joined
0 54.98 2006-03-31,48500,2006-04-30,48500,2006-05-31,48500
1 67.28 2006-01-31,54500,2006-02-28,54500,2006-03-31,54500
我有一个 pandas DataFrame,如下所示:
supply_area transaction_date price
0 54.98 2006-03-31 48500.0
0 54.98 2006-04-30 48500.0
0 54.98 2006-05-31 48500.0
1 67.28 2006-01-31 54500.0
1 67.28 2006-02-28 54500.0
1 67.28 2006-03-31 54500.0
我想按 supply_area 分组,其中有一列连接 transaction_date 和价格,如下所示:
supply_area transaction_date_price price
0 54.98 2006-03-31,48500.0,2006-04-30,48500.0,2006-05-31,48500.0
1 67.28 2006-01-31,54500.0,2006-02-28,54500.0,2006-03-31,54500.0
我试过这个和其他一些东西,但它不起作用。
df = df.groupby('supply_area').agg(
{'supply_area': 'first', 'transaction_date': ','.join, 'price': ','.join})
我对 python 和 pandas 库还很陌生,所以我不确定我想要的是否可行。
提前致谢!
您可以使用第一个连接创建一个新列(此处称为“已连接”,但任何名称都可以),然后连接到 groupby:
df['joined'] = (df['transaction_date'] + ',' + df['price'].astype(str))
df.groupby('supply_area', as_index=False)['joined'].apply(','.join)
输出:
supply_area joined
0 54.98 2006-03-31,48500,2006-04-30,48500,2006-05-31,48500
1 67.28 2006-01-31,54500,2006-02-28,54500,2006-03-31,54500