Groupby a DataFrame into a new DataFrame with arange as index
本问题已经有最佳答案,请猛点这里访问。
我有一个问题,在这个例子中简化了。考虑一下这个熊猫数据框架,df_a:
1 2 3 4 5 6 7 8 | df_a=pd.DataFrame([['1001',34.3,'red'],['1001',900.04,'red'],['1001',776,'red'],['1003',18.95,'green'],['1004',321.2,'blue']],columns=['id','amount','name']) id amount name 0 1001 34.30 red 1 1001 900.04 red 2 1001 776.00 red 3 1003 18.95 green 4 1004 321.20 blue |
我想按这个数据框架进行分组,将数量求和到一个新的数据框架中,并创建一个新的类似"arange"的索引。这应该是我想要的结果:
1 2 3 4 | id amount 0 1001 1710.34 1 1003 18.95 2 1004 321.20 |
但是我的工作创建了一个系列(因此我想要一个数据框架):
1 2 3 4 5 6 7 | df_a.groupby(['id'])['amount'].sum() id 1001 1710.34 1003 18.95 1004 321.20 Name: amount, dtype: float64 |
或基于ID列创建新索引:
1 2 3 4 5 6 7 | pd.DataFrame(df_a.groupby(['id'])['amount'].sum()) amount id 1001 1710.34 1003 18.95 1004 321.20 |
我还尝试传递索引参数,但这也不起作用:
1 2 3 4 5 6 7 8 | pd.DataFrame(df_a.groupby(['id'])['amount'].sum(),index=df_a.index.values) amount 0 NaN 1 NaN 2 NaN 3 NaN 4 NaN |
有人对此有优雅的解决方案吗?
在GroupBy中有一个参数作为索引
1 | df_a.groupby('id', as_index = False)['amount'].sum() |
你得到
1 2 3 4 | id amount 0 1001 1710.34 1 1003 18.95 2 1004 321.20 |
您可以通过添加
1 2 | new_df = df_a.groupby(['id'])['amount'].sum().to_frame('amount').reset_index() print(new_df) |
结果:
1 2 3 4 | id amount 0 1001 1710.34 1 1003 18.95 2 1004 321.20 |
如果只使用
它将保持
1 2 3 4 5 | amount id 1001 1710.34 1003 18.95 1004 321.20 |
另一种方法是在上面的代码中重置数据帧上的索引:
输出与上述相同:
1 2 3 4 | id amount 0 1001 1710.34 1 1003 18.95 2 1004 321.20 |