【问题标题】:Function to iterate two different dataframes and fill a column if condition is met如果满足条件,则迭代两个不同的数据帧并填充一列的函数
【发布时间】:2021-08-08 04:14:12
【问题描述】:

我是使用 python 编写函数的新手,希望能在这方面提供一些帮助:

问题陈述:

我有两个数据框 - df1df2。两个数据帧都有一个共享列(我们称之为Name),但数据帧的长度不同。如果名称存在于df2 中,我需要编写一个函数来填充df1 中的值。

>>> df1
Name 1 2 3
A
B
C
D
>>> df2
Name
B
D

在 df1 的第 3 列中输入的值 = YES

New df1
Name 1 2 3
A        
B         YES
C
D         YES

到目前为止我对该功能的尝试:

def fillerfunc(df1, df2, Index_Column, value):
    for i, row in df1.iterrows():
        df1.iloc[i,Index_Column] = np.select([df1['Name'].isin(df2)], value, np.nan)

希望将其实现为:

df1['3'] = fillmodel(df1, df2, 3, YES)

ValueError: Must have equal len keys and value when setting with an iterable

我了解该错误可能与 df1 & df2 的长度不同。但我认为我的功能在其他方面也是错误的。帮助和指点让我可以学习如何做到这一点会很棒!

谢谢!

【问题讨论】:

    标签: python pandas dataframe function for-loop


    【解决方案1】:

    您可以使用布尔索引来做到这一点。

    df1.loc[df1.Name.isin(df2.Name), '3'] = 'Yes'
    

    或者,如果您的列 3 是数字列名:

    df1.loc[df1.Name.isin(df2.Name), 3] = 'Yes'
    

    【讨论】:

    • 谢谢詹姆斯!我在我的代码中做了一个小的修改 - 使用 iloc 而不是 loc 因为我想使用 '3' 作为列的索引。
    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2020-02-13
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多