我有一个像下面这样的数据框。 每个水果加一行,其中 我知道如何生成一个新列来显示每个水果的平均价格,但我不知道如何用这个平均值添加一行。 你能帮我吗?
import numpy as np
import pandas as pd
fruit = ['apple','apple','banana','banana','kiwi','kiwi','grape','grape']
ftype = ['one','two','one','two','three','one','one','two']
resource = ['us','us','us','us','us','us','us','us']
price = [100,150,200,300,120,300,400,500]
df = pd.DataFrame({'fruit':fruit,'ftype':ftype,'resource':resource,'price':price})
print(df)
原始dataframe:
fruit ftype price resource
0 apple one 100 us
1 apple two 150 us
2 banana one 200 us
3 banana two 300 us
4 kiwi three 120 us
5 kiwi one 300 us
6 grape one 400 us
7 grape two 500 us
我想产生:
fruit ftype price resource
0 apple one 100 us
1 apple two 150 us
apple avg 125 all
2 banana one 200 us
3 banana two 300 us
banana avg 250 all
4 kiwi three 120 us
5 kiwi one 300 us
kiwi avg 210 all
6 grape one 400 us
7 grape two 500 us
grape avg 450 all
问题来源StackOverflow 地址:/questions/59386739/pandas-how-to-add-rows-with-average-grouped-columns
您可以使用datafame .assign来聚合平均值并添加新列。
df1 = df.groupby('fruit', as_index=False)['price'].mean().assign(resource='all',ftype='avg')
然后使用concat和排序值:
df = (pd.concat([df, df1], sort=True)
.sort_values(['fruit','resource'], ascending=[True, False])
.reset_index(drop=True))
print (df)
fruit ftype price resource
0 apple one 100 us
1 apple two 150 us
2 apple avg 125 all
3 banana one 200 us
4 banana two 300 us
5 banana avg 250 all
6 grape one 400 us
7 grape two 500 us
8 grape avg 450 all
9 kiwi three 120 us
10 kiwi one 300 us
11 kiwi avg 210 all
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。