如果 col1 和 col2 的组合在另一行中匹配(但只匹配一次),我想填充 col3 nan 值。例如:在第 2 行,由于 col1 和 col2 都是 cat,那么用 'George' 填充 col3。在第 4 行,由于 col1 和 col2 是 Cat 和 Dog,那么将 col3 填充为 Matt
<块引用>但是,如果组合出现不止一次,如第 5 行和第 7 行,则忽略不要用任何东西填充 nan。
col1 | col2 | col3 |
---|---|---|
猫 | 猫 | 乔治 |
猫 | 猫 | 南 |
猫 | 狗 | 马特 |
猫 | 狗 | 南 |
鹦鹉 | 麋鹿 | 约翰 |
鹦鹉 | 麋鹿 | 南 |
鹦鹉 | 麋鹿 | 瑞恩 |
鹦鹉 | 麋鹿 | 南 |
col1 | col2 | col3 |
---|---|---|
猫 | 猫 | 乔治 |
猫 | 猫 | 乔治 |
猫 | 狗 | 马特 |
猫 | 狗 | 马特 |
鹦鹉 | 麋鹿 | 约翰 |
鹦鹉 | 麋鹿 | 南 |
鹦鹉 | 麋鹿 | 瑞恩 |
鹦鹉 | 麋鹿 | 南 |
我希望这是有道理的。谢谢
答案 0 :(得分:0)
我们可以先得到每组col1, col3
的大小。然后我们使用 ffill
的大小为 2 的那些:
sizes = df.groupby(['col1', 'col2'])['col2'].transform("size")
df.loc[sizes <= 2, "col3"] = df.loc[sizes <= 2, "col3"].ffill()
col1 col2 col3
0 Cat Cat George
1 Cat Cat George
2 Cat Dog Matt
3 Cat Dog Matt
4 Parrot Elk John
5 Parrot Elk NaN
6 Parrot Elk Ryan
7 Parrot Elk NaN