pandas 我不知道这种搜索叫什么

vfh0ocws  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(107)

我确信我想做的事情对某些人来说一定是一个标准的事情,可能有一个特殊的名字(groupby,pivot,melt等),只是不管名字是什么我不知道,所以我似乎不能取得进展。
总结如下:
给定具有列A、B和C的帧DF1,我希望能够得到由DF1的所有行“x”组成的新帧DF2,对于这些行,A的值(称为“a [x]”)使得存在“某行y”(x可以或可以不等于y),其包含值的三元组(a [y],b [y],c [y]),使得a [x]==“a [y]”并且b [y]=“bbb”。
如果这听起来太令人困惑,假设数据框架是:

DF1 =
Person Possession Cost
Geoff Cat 3
Sue Cat 4
Geoff Dog 10
Geoff Cat 11
Mary Cat 1
Tom Dog 55

也就是说,与一般的陈述相比,我们有A =人,B =占有,C =成本。
然后,给定一个特定的所有权,例如“Cat”,我希望能够检索新帧:

DF2 =
Person Possession Cost
Geoff Cat 3
Sue Cat 4
Geoff Dog 10
Geoff Cat 11
Mary Cat 1

这是DF1的每一行,其中“Person”是“Cat Owner”(在本例中,其恰好是除“Tom”之外的所有人)。
我最初的想法是过滤“猫”来获得猫的主人,但这删除了行“杰夫狗10”。
我不想写缓慢的迭代(尽管我可以)。
谷歌并没有帮助我,因为我找不到一种比上面更简洁的措辞方式来表达我想做的事情。
这必须是一个标准的事情想要做,虽然,所以我希望有人更有经验会说“这只是一个XXXXXX的问题”,其中XXXXX是一个很好的专业搜索词,我得到进一步。

mzillmmw

mzillmmw1#

我不知道它的名字,但我一直在做这件事的方法是获取可能的值:

df.loc[ df['Possession'] == 'Cat', 'Person' ]
0    Geoff
1      Sue
3    Geoff
4     Mary
Name: Person, dtype: object

然后使用.isin()

df.loc[ df['Person'].isin( df.loc[ df['Possession'] == 'Cat', 'Person' ] ) ]
Person Possession  Cost
0  Geoff        Cat     3
1    Sue        Cat     4
2  Geoff        Dog    10
3  Geoff        Cat    11
4   Mary        Cat     1

相关问题