Bas*_*Bas 7 python pandas pandas-groupby
我有一个问题,在这个例子中简化了。考虑这个 Pandas DataFrame,df_a:
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
Run Code Online (Sandbox Code Playgroud)
我想通过将数量相加到一个新的 DataFrame 并创建一个新的类似“arange”的索引来对这个数据帧进行分组。这应该是我想要的结果:
id amount
0 1001 1710.34
1 1003 18.95
2 1004 321.20
Run Code Online (Sandbox Code Playgroud)
但是我的努力创建了一个系列(我想要一个 DataFrame 作为结果):
df_a.groupby(['id'])['amount'].sum()
id
1001 1710.34
1003 18.95
1004 321.20
Name: amount, dtype: float64
Run Code Online (Sandbox Code Playgroud)
或者根据 id 列创建一个新索引:
pd.DataFrame(df_a.groupby(['id'])['amount'].sum())
amount
id
1001 1710.34
1003 18.95
1004 321.20
Run Code Online (Sandbox Code Playgroud)
我也试过传递 index 参数,但这也不起作用:
pd.DataFrame(df_a.groupby(['id'])['amount'].sum(),index=df_a.index.values)
amount
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
Run Code Online (Sandbox Code Playgroud)
有没有人对此有一个优雅的解决方案?
Vai*_*ali 11
您在 groupby 中有一个参数 as_index
df_a.groupby('id', as_index = False)['amount'].sum()
Run Code Online (Sandbox Code Playgroud)
你得到
id amount
0 1001 1710.34
1 1003 18.95
2 1004 321.20
Run Code Online (Sandbox Code Playgroud)
to_frame()您可以通过添加和来尝试以下操作reset_index():
new_df = df_a.groupby(['id'])['amount'].sum().to_frame('amount').reset_index()
print(new_df)
Run Code Online (Sandbox Code Playgroud)
结果:
id amount
0 1001 1710.34
1 1003 18.95
2 1004 321.20
Run Code Online (Sandbox Code Playgroud)
如果你只使用to_frame()ie 使用
df_a.groupby(['id'])['amount'].sum().to_frame('amount')
它将保持索引id如下:
amount
id
1001 1710.34
1003 18.95
1004 321.20
Run Code Online (Sandbox Code Playgroud)
另一种方法是在上面的代码中重置数据帧上的索引:
new_df = pd.DataFrame(df_a.groupby(['id'])['amount'].sum()).reset_index()
输出将与上面相同:
id amount
0 1001 1710.34
1 1003 18.95
2 1004 321.20
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16650 次 |
| 最近记录: |