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

标签 python pandas

我正在尝试在 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/

相关文章:

python - 为什么我的pydoc命令会检索exception.syntaxerror?

python - 使用 python 的 os.walk 来搜索特定的目录名称?

python - n == 7 给我一个缩进错误

python - 将字典列表转换为数据框python

python - 使用一列中的多个值过滤数据框中的值

python - OpenCV 卡尔曼滤波器 w/python 的实际实现?

python - 如何让多个 Pod 在 Kubernetes 上相互通信

python - 将整个数据框转换为小写并删除 nan,python 3.6

python - 删除 Pandas 中索引未唯一标识的行

python - 想要从 pandas/python 中的数据帧创建像数据帧一样的稀疏矩阵