替换pandas数据帧中的单元格值,其中值为“NaN”,其值为来自另一个/同一数据帧的值

时间:2016-09-06 21:05:19

标签: python pandas

生成了以下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-cell。

  3. 因此,结果应为:

                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
    

1 个答案:

答案 0 :(得分: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

enter image description here