数据分析问题 - 根据混合列计算年龄

问题描述 投票:0回答:1

所以我试图弄清楚互联网如何做到这一点,但我没有成功。我有一个大约5,000行的数据集,但为简单起见,下面是这个数据框。我想计算IN年份的年龄(即带月数的数字除以12)但我无法弄清楚如何让python识别数字。您可以指出我的任何想法或方向?

test = (3, 6, 1, '7 m', '8 m', 5, 11, '10 m','almost 4 m', '9 y & m', '3 Yr 7 mths')
test_list = list(test) 
test_series = pd.Series(test_list) 
df_test = pd.DataFrame(test_series) 
df_test.rename(columns = {0:'Key'}, inplace = True)
df_test['Years_Old'] = np.nan df_test
pandas dataframe series
1个回答
0
投票

使用正则表达式,我们可以首先提取子句,如“[number] [space(s)(optional)] [y或m(optional)]”(不区分大小写),然后将[number] s乘以1/12,如果[y或m]是“m”(因为我们正在计算年数),然后为每条记录加总:

import re

z = df_test['Key'].astype(str).str.extractall('(\d+)\s*([mMyYwW])?').fillna('m').astype({0: int, 1: str})
df_test['Years_Old'] = (z[0] * z[1].str.lower().map({'y': 1, 'm': 1/12, 'w': 1/52})).groupby(level=0).sum()

print(df_test)

输出:

            Key  Years_Old
0             3   0.250000
1             6   0.500000
2             1   0.083333
3           7 m   0.583333
4           8 m   0.666667
5             5   0.416667
6            11   0.916667
7          10 m   0.833333
8    almost 4 m   0.333333
9       9 y & m   9.000000
10  3 Yr 7 mths   3.583333
11         10 w   0.192308

笔记:

  1. 默认情况下,如果没有给出y / m我假设是几个月,但是如果需要的话,很容易切换到.fillna('y')线上的.fillna('m')而不是z = ...
  2. 不确定“9 y&m”是什么意思,所以将其视为仅仅9年
© www.soinside.com 2019 - 2024. All rights reserved.