根据键 pandas 从另一个 df 添加行

Add rows from another df based on keys pandas

已编辑* 我有一个很大的 df,其中有许多行在 some 列中共享相同的值。 我想执行以下操作:

  1. new df = 识别 df 中在特定列(非空)中具有值的行。

'''

df = pd.DataFrame({"a": [1, 2,2,2, 3, 4],
                   "b":['A','B','B', 'B','C','D'],
                   "c":[NaN, 2,NaN,NaN,NaN,NaN]})

'''

df1=df[~df['c'].isnull()]

'''

  1. 将 df 中共享 2 个键的行添加到 'new_df'。

我尝试使用合并:

df2 = pd.merge(df1,df,on=['a','b'], how='left')

但结果是它添加了几次相同的行而不是唯一的行

    a   b   c_x c_y
0   2   B   2.0 2.0
1   2   B   2.0 NaN
2   2   B   2.0 NaN

我只想保留一个包含所有值的 'c' 列。不确定使用什么方法。

希望我说清楚了... 谢谢!

据我了解,您希望仅按 'a' 和 'b' 和 return 分组,其中至少一行在列 'c'。如果是这样的话。给你

加载 df:

df = pd.DataFrame({"a": [1,1,1, 2,2,2, 3, 4], "b":['A','A','A','B','B', 'B','C','D'], "c":[None, None,None,2,None,None,None,None]})

过滤任何 non-NaNs:

df.groupby(['a','b']).filter(lambda g: any(~g['c'].isna()))

输出:


    a   b   c
3   2   B   2.0
4   2   B   NaN
5   2   B   NaN