分割两个pandas DataFrames并保留非数字列[英] Divide two pandas DataFrames and keep non-numeric columns

本文是小编为大家收集整理的关于分割两个pandas DataFrames并保留非数字列的处理方法,想解了分割两个pandas DataFrames并保留非数字列的问题怎么解决?分割两个pandas DataFrames并保留非数字列问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有两个包含数字和非数字值的 pandas DataFrame.我想一分为二,但保留非数字列.这是一个 MWE:

a = pd.DataFrame(
    [
        ['group1', 1., 2.],
        ['group1', 3., 4.],
        ['group1', 5., 6.]
    ], 
    columns=['Group', 'A', 'B']
)

b = pd.DataFrame(
    [
        ['group1', 7., 8.],
        ['group1', 9., 10.],
        ['group1', 11., 12.]
    ],
    columns=['Group', 'A', 'B']
)

尝试做:

b.div(a)

结果:

<块引用>

TypeError: unsupported operand type(s) for /: 'str' and 'str'

所以为了解决这个问题,我已经完成了:

result = b.drop(["Group"], axis=1).div(a.drop(["Group"], axis=1))
print(result)
#     A    B
#0  7.0  4.0
#1  3.0  2.5
#2  2.2  2.0

这是正确的,但我也想保留 "Group" 列.

获得我想要的输出的一种方法是:

desired_output = b[["Group"]].join(result)
print(desired_output)
#    Group    A    B
#0  group1  7.0  4.0
#1  group1  3.0  2.5
#2  group1  2.2  2.0

但我真正的 DataFrame 有许多非数字列.有没有更干净/更快/更有效的方法来告诉 pandas 只划分数字列?

推荐答案

您可以使用 np.divide,将掩码传递给 where 参数.

np.divide(b, a, where=a.dtypes.ne(object))

假设非数字列在 DataFrames 中是相同的,使用 combine_first/fillna 将它们取回:

np.divide(b, a, where=a.dtypes.ne(object)).combine_first(a)


    Group    A    B
0  group1  7.0  4.0
1  group1  3.0  2.5
2  group1  2.2  2.0

本文地址:https://www.itbaoku.cn/post/1728077.html