gpt4 book ai didi

python - 根据其他 2 列的比较填充列(pandas)

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:17 25 4
gpt4 key购买 nike

我正在尝试在 pandas 中执行以下操作:我有 2 个 DataFrame,它们都有很多列。DataFrame 1 有一个 A 列,这是我的任务感兴趣的;DataFrame 2 有值得关注的 B 列和 C 列。

需要做什么:遍历 A 列中的值并查看 B 列中的某个位置是否存在相同的值。如果存在,则在 Dataframe 1 中创建 D 列,并使用 C 中的值填充其各自的单元格它与 B 中找到的值位于同一行。如果 B 中不存在 A 中的值,则用零填充 D 中的单元格。

for i in range(len(df1)):
if df1['A'].iloc[i] in df2.B.values:
df1['D'].iloc[i] = df2['C'].iloc[i]
else:
df1['D'].iloc[i] = 0

这给了我一个错误:关键字“D”。如果我提前创建 D 列并填充它(例如,用 0),那么我会收到以下警告:正在尝试在 DataFrame 切片的副本上设置值。我该如何解决这个问题?或者有更好的方法来完成我想做的事情吗?

非常感谢您的帮助!

最佳答案

如果我理解正确的话:

给定这两个数据框:

import pandas as pd
import numpy as np

np.random.seed(42)

df1=pd.DataFrame({'A':np.random.choice(list('abce'), 10)})
df2=pd.DataFrame({'B':list('abcd'), 'C':np.random.randn(4)})

>>> df1
A
0 c
1 e
2 a
3 c
4 c
5 e
6 a
7 a
8 c
9 b

>>> df2
B C
0 a 0.279041
1 b 1.010515
2 c -0.580878
3 d -0.525170

您可以使用合并来实现您想要的目标:

new_df = df1.merge(df2, left_on='A', right_on='B', how='left').fillna(0)[['A','C']]

然后只需重命名列即可:

new_df.columns=['A', 'D']

>>> new_df
A D
0 c -0.580878
1 e 0.000000
2 a 0.279041
3 c -0.580878
4 c -0.580878
5 e 0.000000
6 a 0.279041
7 a 0.279041
8 c -0.580878
9 b 1.010515

关于python - 根据其他 2 列的比较填充列(pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49502732/

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