首页 > 解决方案 > Pandas 在第一个 % 符号上拆分列,在第二个字母上

问题描述

我们有以下数据框

# raw_df
print(raw_df.to_dict())

{'Edge': {1: '-1.9%-2.2%', 2: '+5.8%-9.4%', 3: '+3.5%-7.2%'}, 'Grade': {1: 'D+D', 2: 'BF', 3: 'B-F'}}

在此处输入图像描述

我们正在尝试将这 2 列拆分为 4 列。Edge列应该在第一个 之后拆分,%Grade列应该在第二个大写字母出现之前拆分。输出应如下所示:

output_df

edge_1 edge_2 grade_1 grade_2
 -1.9%  -2.2%      D+       D
 +5.8%  -9.4%       B       F
 +3.5%  -7.2%      B-       F

我们必须raw_df[['t1_grade', 't2_grade']] = raw_df['Grade'].str.extractall(r'([A-Z])').unstack()拆分Grade列,但是这里去掉了 + 和 -,这是一个问题。而且我们不确定在第一个 % 出现后如何拆分Edge列。

标签: pythonpandas

解决方案


我们可以str.extract如下使用:

df["edge_1"] = df["Edge"].str.extract(r'^([+-]?\d+(?:\.\d+)?%)')
df["edge_2"] = df["Edge"].str.extract(r'([+-]?\d+(?:\.\d+)?%)$')
df["grade_1"] = df["Grade"].str.extract(r'^([A-Z][+-]?)')
df["grade_2"] = df["Grade"].str.extract(r'([A-Z][+-]?)$')

这里的策略是使用正则表达式从两个当前列中提取第一个/最后一个百分比/等级。


推荐阅读