按年龄分组与平均工资

时间:2019-12-10 22:19:30

标签: python pandas pandas-groupby

我有一张桌子

| ID | name | Age | Salary | Sex

  2  |  Tom | 20  | 30000   | 1
  3  |  Ken | 25  | 40000  | 2
  5  |  Gen | 50  | 80000   | 2
  6  |  Per | 20  | 60000   | 1

之前的信息:我已经检查了我的ID,Age,性别列是否为int64数据类型,但Salary数据类型为float。

我想计算平均工资的年龄。

我的代码是

tableA.groupby(['Age']).mean()

结果出来

      | ID  |  Sex
Age
  20  |  4  |   1
  25  |  3  |   2
  50  |  5  |   2

然后我意识到我的薪水数据类型是float而不是int64,因此薪水平均值不显示,所以我通过

将其转换为int65
tableA['Salary'] = tableA['Salary'].astype(np.int64)

#But I got warning:A value is trying to be set on a copy of a slice from a DataFrame.
#Try using .loc[row_indexer,col_indexer] = value instead

我按组分组,并根据年龄计算平均工资 通过

tableA.groupby(['Age'])['Salary'].mean()

      | 
Age
  20  |  4.500000e+04
  25  |  6.000000e+04
  50  |  8.000000e+04

我的预期结果是


      |   Salary
Age
  20  |  45000
  25  |  60000
  50  |  80000

我已经将Salary类型转换为int64了,为什么还仍然使数据看起来像float?如何使用Salary列名获得预期的结果(稍后我需要创建一个图)?谢谢

2 个答案:

答案 0 :(得分:1)

很高兴提供帮助。我建议两件事。

一个:在操作后更改类型。

table = df.groupby(['Age'])['Salary'].mean().astype(int) #this should work

二:将类型更改为float而不是numpy的int64。

tableA['Salary'] = tableA['Salary'].astype(float)
table = df.groupby(['Age'])['Salary'].mean()

请告诉我这是否可行。

答案 1 :(得分:0)

您可以轻松地将科学计数法更改为十进制计数法。

在这里检查:

How to write real value of -2.12683575e-04 in a file (Python)