【问题标题】:split columns, extract numbers, and subtract difference拆分列、提取数字并减去差异
【发布时间】:2021-09-13 01:49:30
【问题描述】:

社区!我有这个下面的df

data = {'exp_lvl': ['5-10 yrs', '3-5 yrs', '1-3 Years']}
df = pd.DataFrame(data)

我的目标是这样的:

我的方法是 1. 替换值,2. 拆分,3. 附加到列表,4. 从附加列表构建列。但是我被困在最后一步,也许有更简单的方法来接近

非常感谢!!!

【问题讨论】:

  • 为什么需要熊猫?只是为了让它打印漂亮?在进入 pandas 之前,我会完成所有的文本处理。

标签: python pandas replace split


【解决方案1】:

这并不难。只是机械的。你努力了吗?

data = {'exp_lvl': ['5-10 yrs', '3-5 yrs', '1-3 Years']}

data['first'] = []
data['second'] = []
data['difference'] = []
for row in data['exp_lvl']:
    parts = [int(i) for i in row.split(' ')[0].split('-')]
    data['first'].append( parts[0] )
    data['second'].append( parts[1] )
    data['difference'].append( parts[1]-parts[0] )

print(data)
import pandas as pd
df = pd.DataFrame(data)
print(df)

输出:

C:\tmp>python x.py
{'exp_lvl': ['5-10 yrs', '3-5 yrs', '1-3 Years'], 'first': [5, 3, 1], 'second': [10, 5, 3], 'difference': [5, 2, 2]}
     exp_lvl  first  second  difference
0   5-10 yrs      5      10           5
1    3-5 yrs      3       5           2
2  1-3 Years      1       3           2

C:\tmp>

【讨论】:

  • 哦,我只是不知道计算值的“技巧” data['first'] = [] 。我被困在将列表转换为 df 列!非常感谢你,蒂姆!!
【解决方案2】:

这是另一种方式:

df.join(df['exp_lvl'].str.extractall(r'(\d+)')[0]
 .unstack()
 .rename({0:'first',1:'second'},axis=1)
 .astype(float)
 .assign(diff = lambda x: x['second'] - x['first']))

【讨论】:

  • 这是一个很好的答案。您能否也提供中间输出,以解释 str.extractall[0] 魔术参数
【解决方案3】:

使用pandas str.split 构造列firstsecond。接下来,计算得到列different

df[['first', 'second']] = df.exp_lvl.str.split('-| ').str[:2].tolist()
df['difference'] = df['second'].astype(int) - df['first'].astype(int)

Out[103]:
     exp_lvl first second  difference
0   5-10 yrs     5     10           5
1    3-5 yrs     3      5           2
2  1-3 Years     1      3           2

【讨论】:

    【解决方案4】:

    另一种方式:

    df[['first', 'second']] = df.exp_lvl.str.extract(r'(\d+)-(\d+)')
    df['difference'] = df['second'].astype(int) - df['first'].astype(int)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 2013-09-26
      • 2018-07-19
      • 2021-02-10
      相关资源
      最近更新 更多