gpt4 book ai didi

python - Pandas 从 dataframe_b 的所有列中减去 dataframe_a 中的每一列,并将结果写入第三个数据帧

转载 作者:行者123 更新时间:2023-12-04 07:59:02 27 4
gpt4 key购买 nike

我有 dataframe_a 和 dataframe_b 填充了可变数量的列但相同数量的行。
我需要从所有 dfa 列中减去 dfb 的每一列,并创建一个包含减去值的新数据框。
现在我正在手动执行此操作:

sub1 = dfa.subtract(dfb[0], axis = 0)
sub2 = dfa.subtract(dfb[1], axis = 0)
sub3 = dfa.subtract(dfb[2], axis = 0)
etc
然后我使用 concat 函数连接所有列:
subbed = pd.concat([sub1, sub2, sub3],axis=1,ignore_index=True)
subbed = pd.concat([dfa, subbed),axis = 1)
这一切似乎非常低效,让我觉得编程很糟糕,哈哈。如果不必手动减去每一列并将结果直接写入新的数据帧,您将如何做到这一点?

最佳答案

设置

import pandas as pd
import numpy as np
from itertools import product

dfa = pd.DataFrame([[8, 7, 6]], range(5), [*'ABC'])
dfb = pd.DataFrame([[1, 2, 3, 4]], range(5), [*'DEFG'])

Pandas 的 concat我使用运算符方法 rsubaxis=0争论。 See this Q&A for more information
pd.concat({c: dfb.rsub(s, axis=0) for c, s in dfa.items()}, axis=1)

A B C
D E F G D E F G D E F G
0 7 6 5 4 6 5 4 3 5 4 3 2
1 7 6 5 4 6 5 4 3 5 4 3 2
2 7 6 5 4 6 5 4 3 5 4 3 2
3 7 6 5 4 6 5 4 3 5 4 3 2
4 7 6 5 4 6 5 4 3 5 4 3 2

Numpy 的广播
你可以玩弄它并了解它是如何工作的
a = dfa.to_numpy()
b = dfb.to_numpy()
c = a[..., None] - b[:, None]

df = pd.DataFrame(dict(zip(
product(dfa, dfb),
c.reshape(5, -1).transpose()
)))

df

A B C
D E F G D E F G D E F G
0 7 6 5 4 6 5 4 3 5 4 3 2
1 7 6 5 4 6 5 4 3 5 4 3 2
2 7 6 5 4 6 5 4 3 5 4 3 2
3 7 6 5 4 6 5 4 3 5 4 3 2
4 7 6 5 4 6 5 4 3 5 4 3 2

关于python - Pandas 从 dataframe_b 的所有列中减去 dataframe_a 中的每一列,并将结果写入第三个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66551179/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com