如何计算用熊猫用破折号分隔的数据平均值



我正在尝试清理csv文件,所以我检索了年龄列中包含破折号的所有值,并且我有此输出

504       40-49
756       20-29
758       40-89
  • 我希望有年龄平均值,而不是将年龄范围记录为 start_age-end_age。
  • 试图计算平均值,但由于破折号,我无法将其转换为数字。 我预计此输出:
504 45
756 25
  • 要创建所需的输出,请添加age_mean并删除age_range
  • pandas.Series.str.split
  • pandas.DataFrame.astype
  • pandas.DataFrame.mean
  • pandas.DataFrame.drop
  • 创建age_mean只需一行代码即可完成,无需创建中间列。
  • 根据 Python 3 的舍入行为,pandas.DataFrame.round不会像人们期望的那样舍入,所以我将最终答案保留为小数。
    • 如果需要,可以添加.round().mean(axis=1).round()
import pandas as pd
# crate dataframe
df = pd.DataFrame({'id': [504, 756, 758], 'age_range': ['40-49', '20-29', '40-89']})
|    |   id | age_range   |
|---:|-----:|:------------|
|  0 |  504 | 40-49       |
|  1 |  756 | 20-29       |
|  2 |  758 | 40-89       |
# create age_mean
df['age_mean'] = df['age_range'].str.split('-', expand=True).astype('int').mean(axis=1)
# drop age_range
df.drop(columns=['age_range'], inplace=True)
# final dataframe
|    |   id |   age_mean |
|---:|-----:|-----------:|
|  0 |  504 |       44.5 |
|  1 |  756 |       24.5 |
|  2 |  758 |       64.5 |

考虑以下数据帧:

In [966]: df
Out[966]: 
a    age
0  504  40-49
1  756  20-29
2  758  40-89

您可以这样做:

## split the `age` column into 2 columns
In [971]: df[['start_age','end_age']] = df['age'].str.split('-', expand=True) 
## convert these new columns to `int` 
In [979]: df.start_age = df.start_age.astype(int)    
In [980]: df.end_age = df.end_age.astype(int)
## Take mean of the row and round it.
In [983]: df['mean'] = df[['start_age', 'end_age']].mean(axis=1).round()

如果您只需要 2 列,则可以这样做:

In [986]: df = df[['a', 'mean']] 
In [987]: df
Out[987]: 
Out[1010]: 
a  mean
0  504  44.5
1  756  24.5
2  758  64.5

相关内容

最新更新