【发布时间】:2020-05-22 15:11:00
【问题描述】:
这是一个非常基本的问题,但我的大脑正在放弃我,我非常感谢一些帮助。
我有一个包含 10000 行的数据集。 我有一个包含 100 个唯一区域名称的区域名称列。 我有一个类型列,类型范围从 1 到 10。 我有一个支出专栏。
我想按地区名称对其进行分组,并添加一个新列,其中包含每个名称的平均支出(甚至在旧支出列中)。
但是: 我只想要 1-7 类型的平均值。因此,我想排除该区域中的任何类型 8、9 或 10。 除非,如果一个区域只包含类型 8、9 或 10。在这种情况下,我想要该支出的平均值。
我玩过的东西,但还没有真正做到:
方法一: 创建 2 个数据集,一个具有类型 1-7,另一个在一个区域中只有类型 8、9 或 10:
main=['1.','2.', '3.','4.', '5.', '6.', '7.']
eight_to_ten=['8.', '9.', '10.']
df_main = df[df['Type'].isin(main)]
df_main['avg_sales'] = df_main.groupby(['Area Name'])['Sales'].mean()
方法二:
df_new['avg_sales'] = df[df['Type'].isin(main)].groupby('Area Name')['Sales'].mean()
我认为有一种非常短的方法可以做到这一点,很可能不必将数据集分成 2 份然后将其连接回来。
使用 for 循环更容易做到吗?
任何帮助将不胜感激
【问题讨论】:
标签: python pandas pandas-groupby