【问题标题】:Replace cell value in pandas dataframe where value is 'NaN' with value from another/same dataframe将值为“NaN”的熊猫数据框中的单元格值替换为另一个/相同数据框中的值
【发布时间】:2017-01-14 10:22:11
【问题描述】:

生成了以下 pandas 数据帧 df1:

df1 = pd.DataFrame(data = {'Value': [1.989920, 'NaN', -9.363819, 'NaN'], 'Group-Index' : [6, 6, 7, 7], 'Group-Order' : [2, 2, 2, 2], 'Index' : [221, 225, 222, 222] })

            Value       Group-Index Group-Order     Index
221         1.989920    6           2               221
225         NaN         6           2               225
222         -9.363819   7           2               222
278         NaN         7           2               222

请注意,pandas 索引会有所不同,因为我使用了实际项目中的数据框输出。

还有第二个数据框 df2 可用,如下所示:

df2 = pd.DataFrame({'Value': [1.989920, -9.363819], 'Group-Index' : [6, 7], 'Group-Order' : [2, 2], 'Index' : [221, 222] })

        Value       Group-Index     Group-Order     Index
221     1.989920    6               2               221
222     -9.363819   7               2               222
  1. 如何搜索第一个数据帧中的 GC-Value 列并找到所有 NaN 值,然后将它们替换为 Group-Index 和 Group-Order 列相同的第二个数据帧中的值在两个数据框的两行中?

  2. 我的问题的另一个解决方案是将值从定义值的行复制到与同一数据帧 df1 中的 Group-Index 和 Group-Order 匹配的 NaN 单元格。

因此,结果应该是:

            Value       Group-Index Group-Order     Index
221         1.989920    6           2               221
225         1.989920    6           2               225
222         -9.363819   7           2               222
278         -9.363819   7           2               222

【问题讨论】:

    标签: python pandas


    【解决方案1】:
    vnull = df1.Value.isnull()
    mrg_cols = ['Group-Index', 'Group-Order']
    df1.loc[vnull, 'Value'] = df2.merge(df1.loc[vnull, mrg_cols]).Value.values
    
    df1
    

    【讨论】:

    • 抱歉,这个解决方案不起作用。没有错误输出,第一个数据帧 df1 保持不变。我添加了两行来轻松生成我引用的数据框。
    猜你喜欢
    • 2019-06-30
    • 2015-02-17
    • 2020-07-31
    • 1970-01-01
    • 2015-01-19
    相关资源
    最近更新 更多