我有一个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中的行替换为所查询的索引的情况下做到这一点?
答案 0 :(得分:3)
将combine_first
与assign
一起使用
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