Pandas 分组 python
Pandas Groupby python
我有一个数据集,其中包含国家名称和一些其他信息,例如文件中的薪水。问题是我需要在文件中找到按 country_id 和城市分组的员工的平均工资,范围为 (0, 5000] (5000, 10000] 和 (10000, 15000]。
我正在使用这种方法,但结果 table 并不是我想要的。你能帮我吗?
df = file.groupby(['country_id',"city"])['salary'].mean().reset_index(name="mean")
bins = [0, 5000]
df['binned'] = pd.cut(df['mean'], bins)
print(df)
我想如果你的工资箱范围总是5000,你可以使用/
运算符和math.ceil
创建每行的箱号
import math
df = pd.DataFrame({
'salary':[
1231, 5000, 7304, 10000, 12302, 15000,
1001, 4900, 6012, 9123, 11231, 14923
],
'country': [
'USA','USA','USA','USA','USA','USA',
'UK','UK','UK','UK','UK','UK'
]
})
df['salary_bin_number'] = (df['salary'] / 5000).apply(lambda x: math.ceil(x))
df.head()
salary
country
salary_bin_number
1231
USA
1
5000
USA
1
7304
USA
2
10000
USA
2
12302
USA
3
使用salary_bin_number
,您可以使用以下代码创建bin的列名
df['salary_range_str'] = df['salary_bin_number'].apply(
lambda bin_number: f'({(bin_number-1) * 5000}-{(bin_number) * 5000}]'
)
然后按salary_range_str
和country
分组计算每个country,salary_range_str
的平均工资。
df = df.groupby(['country', 'salary_range_str'])['salary'].mean().reset_index()
最后,将列 salary_range_str
旋转为列。
df = pd.pivot_table(df, index='country', columns='salary_range_str', values='salary')
输出
country
(0-5000]
(10000-15000]
(5000-10000]
UK
2950.5
13077
7567.5
USA
3115.5
13651
8652
我有一个数据集,其中包含国家名称和一些其他信息,例如文件中的薪水。问题是我需要在文件中找到按 country_id 和城市分组的员工的平均工资,范围为 (0, 5000] (5000, 10000] 和 (10000, 15000]。 我正在使用这种方法,但结果 table 并不是我想要的。你能帮我吗?
df = file.groupby(['country_id',"city"])['salary'].mean().reset_index(name="mean")
bins = [0, 5000]
df['binned'] = pd.cut(df['mean'], bins)
print(df)
我想如果你的工资箱范围总是5000,你可以使用/
运算符和math.ceil
import math
df = pd.DataFrame({
'salary':[
1231, 5000, 7304, 10000, 12302, 15000,
1001, 4900, 6012, 9123, 11231, 14923
],
'country': [
'USA','USA','USA','USA','USA','USA',
'UK','UK','UK','UK','UK','UK'
]
})
df['salary_bin_number'] = (df['salary'] / 5000).apply(lambda x: math.ceil(x))
df.head()
salary | country | salary_bin_number |
---|---|---|
1231 | USA | 1 |
5000 | USA | 1 |
7304 | USA | 2 |
10000 | USA | 2 |
12302 | USA | 3 |
使用salary_bin_number
,您可以使用以下代码创建bin的列名
df['salary_range_str'] = df['salary_bin_number'].apply(
lambda bin_number: f'({(bin_number-1) * 5000}-{(bin_number) * 5000}]'
)
然后按salary_range_str
和country
分组计算每个country,salary_range_str
的平均工资。
df = df.groupby(['country', 'salary_range_str'])['salary'].mean().reset_index()
最后,将列 salary_range_str
旋转为列。
df = pd.pivot_table(df, index='country', columns='salary_range_str', values='salary')
输出
country | (0-5000] | (10000-15000] | (5000-10000] |
---|---|---|---|
UK | 2950.5 | 13077 | 7567.5 |
USA | 3115.5 | 13651 | 8652 |