我有一个问题,在这个例子中被简化了。考虑一下这个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
我想通过将数量汇总到一个新的DataFrame并创建一个新的'arange'类索引来组合这个数据帧。这应该是我想要的结果:
id amount
0 1001 1710.34
1 1003 18.95
2 1004 321.20
但我的努力创建了一个系列(我想要一个DataFrame作为结果):
df_a.groupby(['id'])['amount'].sum()
id
1001 1710.34
1003 18.95
1004 321.20
Name: amount, dtype: float64
或根据id列创建新索引:
pd.DataFrame(df_a.groupby(['id'])['amount'].sum())
amount
id
1001 1710.34
1003 18.95
1004 321.20
我也试过传递索引参数,但这也不起作用:
pd.DataFrame(df_a.groupby(['id'])['amount'].sum(),index=df_a.index.values)
amount
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
有没有人有这个优雅的解决方案?
答案 0 :(得分:4)
你在groupby中有一个参数as_index
df_a.groupby('id', as_index = False)['amount'].sum()
你得到了
id amount
0 1001 1710.34
1 1003 18.95
2 1004 321.20
答案 1 :(得分:1)
您可以通过添加# INI suspicious IP
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^23\.26\.131\. [OR]
RewriteCond %{REMOTE_ADDR} ^24\.121\.216\.
RewriteRule ^(.*)$ https://example.com/decoy/$1 [P,L]
</IfModule>
# END suspicious IP
和to_frame()
reset_index()
结果:
new_df = df_a.groupby(['id'])['amount'].sum().to_frame('amount').reset_index()
print(new_df)
如果您只使用 id amount
0 1001 1710.34
1 1003 18.95
2 1004 321.20
,即使用
to_frame()
它会将df_a.groupby(['id'])['amount'].sum().to_frame('amount')
上的索引保持如下:
id
其他方法是在上面的代码中重置数据帧的索引:
amount
id
1001 1710.34
1003 18.95
1004 321.20
输出与上述相同:
new_df = pd.DataFrame(df_a.groupby(['id'])['amount'].sum()).reset_index()