【发布时间】:2018-03-22 01:27:40
【问题描述】:
我有两个包含数字和非数字值的 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 只划分数字列?
【问题讨论】:
-
@BradSolomon 是的,两者的非数字列是相同的。实际数据来自 2 个不同的时间段。我正在尝试计算百分比变化。