gpt4 book ai didi

python - 减去 pandas 数据框,同时保留一些列完好无损

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:40 26 4
gpt4 key购买 nike

假设我有两个数据框:

data1 = """
idx, stat, val
1, 1, 5
2, 1, 10
3, 2, 15
4, 3, 20
"""
data2 = """
idx, stat, val
2, 1, 8
4, 5, 16
"""

(抱歉 - 我不知道如何在 pandas 中轻松编码 - 我会在现实生活中从 csv 中读取它们)。

我想减去这两个数据帧,以便仅减去 val 列(在现实生活中,这些是站坐标)。如果两个数据帧中只有一个具有各自的索引值(ascii 格式中的列 idx),则结果应为 NaN。如果立即删除不匹配的行也可以(无论如何我都会在之后调用 dropna)。

因此,我想要的结果是:

desired = """
idx, stat, val
1, 1, NaN
2, 1, 2
3, 2, NaN
4, 3, 4
"""

原则上data1.sub(data2)工作得很好——除了我看不到如何“保护”统计列免受减法的影响。我还尝试了 data1.sub(data2['val'], axis=0),但这搞乱了 data1.sub(data2) 中自动执行的行匹配>。解决方法是随后用 data1 中的原始值重新替换统计列,但这看起来相当笨拙。

最佳答案

您可以使用:

df1.set_index(['idx','stat'], inplace=True)
df2.set_index('idx', inplace=True)

print (df1.sub(df2[['val']]))
val
idx stat
1 1 NaN
2 1 2.0
3 2 NaN
4 3 4.0

print (df1.sub(df2[['val']]).reset_index())
idx stat val
0 1 1 NaN
1 2 1 2.0
2 3 2 NaN
3 4 3 4.0

如果 idxdf 中的索引:

print (df1)
stat val
idx
1 1 5
2 1 10
3 2 15
4 3 20

print (df2)
stat val
idx
2 1 8
4 5 16

df1.set_index('stat', append=True, inplace=True)
print (df1.sub(df2[['val']]).reset_index())
idx stat val
0 1 1 NaN
1 2 1 2.0
2 3 2 NaN
3 4 3 4.0

关于python - 减去 pandas 数据框,同时保留一些列完好无损,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38191307/

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