我们有以下数据框
# 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 列。
最佳答案
我们可以使用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][+-]?)$')
这里的策略是使用正则表达式从当前的两个列中提取第一个/最后一个百分比/成绩。
关于python - Pandas 在第一个 % 符号和第二个字母上拆分列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68570458/