我有一个像这样的数据框df1
:
ID1 ID2
0 foo bar
1 fizz buzz
还有一个像这样的df2
:
ID1 ID2 Count Code
0 abc def 7 B
1 fizz buzz 5 B
2 fizz1 buzz2 9 C
3 foo bar 6 B
4 foo bar 6 Z
我想做的是过滤第二个数据帧,其中 ID1
和 ID2
匹配第一个数据帧中的一行,作为数据帧 sub_df
,然后将以下代码 sub_df.loc[sub_df["Count"] >= 5, "Code"] = "A"
应用到 sub_df
:
sub_df:
ID1 ID2 Count Code
1 fizz buzz 5 B
3 foo bar 6 B
4 foo bar 6 Z
最后,我想生成一个如下所示的数据框 df
:
ID1 ID2 Count Code
0 abc def 7 B
1 fizz buzz 5 A
2 fizz1 buzz2 9 C
3 foo bar 6 A
4 foo bar 6 A
我该怎么做?谢谢。
最佳答案
你可以 merge
两个带有 indicator
的数据帧,并使用它来将 Code
设置为 A
或不是:
df = df2.merge(df1, how='left', on=['ID1','ID2'], indicator='ind')
df.loc[(df["Count"] >= 5) & (df['ind'] == 'both'), "Code"] = "A"
df = df.drop('ind', axis=1)
print(df2)
ID1 ID2 Count Code
0 abc def 7 B
1 fizz buzz 5 A
2 fizz1 buzz2 9 C
3 foo bar 6 A
4 foo bar 6 A
关于python - 在 Pandas 中操作子集数据帧的行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57725030/