在pd.DataFrame.query()之后插入值并保留原始数据

时间:2018-11-20 16:56:00

标签: python pandas

我有一个df:

df = pd.DataFrame([[1,1],[3,4],[3,4]], columns=["a", 'b'])
    a   b
0   1   1
1   3   4
2   3   4

我必须根据查询过滤此df。查询可能很复杂,但是这里我使用一个简单的查询:

items = [3,4]
df.query("a in @items and b == 4")
    a   b
1   3   4
2   3   4

仅在这些行中,我想在新列中添加一些值:

configuration = {'c': 'action', "d": "non-action"}
for k, v in configuration.items():
    df[k] = v

其余各行应为空值或np.nan。所以我的最终df应该看起来像:

    a   b   c       d
0   1   1   np.nan  np.nan
1   3   4   action  non-action
2   3   4   action  non-action

问题在于,要进行查询,我最终得到一个数据框的副本。然后,我必须以某种方式合并它们,并用索引替换已修改的行。如何在不将原始df中的行替换为所查询的索引的情况下做到这一点?

1 个答案:

答案 0 :(得分:3)

combine_firstassign一起使用

df.query("a in @items and b == 4").assign(**configuration).combine_first(df)
Out[138]: 
     a    b       c           d
0  1.0  1.0     NaN         NaN
1  3.0  4.0  action  non-action
2  3.0  4.0  action  non-action