我有两个 Dataframe 。第一个是行中有多个相同值的条目,另一个是每个列组合只有一行。我想得到第一个 Dataframe 的索引/行,其中列A,B和C在两个 Dataframe * 和 * 中 * 成对相等 *,其中第一个 Dataframe 中的列D等于n。列A、B和C是所有列的子集。我想指定只有那些列必须相等。使用这些索引,我想改变列E的值(简单地使用df.loc[indices,'E']='n'。
第一个是具有相同值的多个条目的条目。原始 Dataframe 具有日期戳,因此它没有多个完全相同的行。
A B C D E
0 a b c y y
1 a b c y y
2 b n m n y
3 b n m n y
4 b n m n y
5 t u j y y
6 t u j y y
7 t u j y y
8 e t y y y
9 e t y y y
第二个 Dataframe 每个条目只有一行,而不是列D和E,并且是第一个 Dataframe 中的条目的子集。
A B C
0 a b c
1 b n m
2 t u j
在该示例中,期望的输出是满足所有条件的索引的列表。
[2,3,4]
我尝试过合并,虽然它确实给予了我正确的行,但我没有得到正确的索引来更新第一个 Dataframe 。我还尝试了三列的MultiIndex,但我错过了D列的过滤器。
我如何才能做到这一点?
2条答案
按热度按时间dsekswqp1#
获得索引列表的一种方法是合并两个 Dataframe ,将索引作为一列添加到第一个 Dataframe ,并将
'n'
分配给第二个 Dataframe 中的D
列,以便只有在A
,B
和C
上匹配并且在D
中具有'n'
的行才匹配。然后,你可以从第一个索引列作为你的结果:输出(用于示例数据):
请注意,
to_list()
不是绝对必要的,下面的代码没有它也能正常工作。然后,您可以使用索引将
E
设置为'n'
:输出:
3qpi33ja2#
假设
df1
和df2
,可以使用布尔索引:输出:
目标指标: