Pandas DataFrame:减去包含字符串数据类型的列

3

如何从包含字符串类型值的两个列中减去?无值表示为“—”并应在结果中显示“—”。结果还应为字符串值类型。

来源

df1 = pd.DataFrame({'x': ['a', 'b', 'c'], 'y': ['5', '---', '7']})

    x   y
0   'a' '5'
1   'b' '---'
2   'c' '7'

df2 = pd.DataFrame({'x': ['a', 'b', 'c'], 'y': ['1', '2', '---']})

    x    y
0   'a'  '1'
1   'b'  '2'
2   'c'  '---'

目标

df3 = df1 - df2

    x   y
0   'a' '4'
1   'b' '---'
2   'c' '---'

1
使用 pd.to_numeric(..., errors='coerce') 将其转换为数字,然后减去特定的列,并使用 fillna('--').astype(str) 将其转换回字符串。 - rafaelc
2个回答

2

Try with:

df1.set_index('x').apply(lambda x: pd.to_numeric(x,errors='coerce')).sub(
      df2.set_index('x').apply(lambda x: pd.to_numeric(x,errors='coerce'))).fillna('--')\
                                                                .reset_index()

   x   y
0  a   4
1  b  --
2  c  --

2
你可以使用pd.to_numeric将所有的'---'替换为NaN,同时将所有值转换为floats:
df1['y'] = pd.to_numeric(df1['y'], errors='coerce')
df2['y'] = pd.to_numeric(df2['y'], errors='coerce')

只需将这两列相减并将结果存储在df1中,例如:

df1['y'] = (df1['y'] - df2['y']).replace(np.nan,'---')

   x    y
0  a    4
1  b  ---
2  c  ---

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接