将以下数据框复制到剪贴板:
textId score textInfo
0 name1 1.0 text_stuff
1 name1 2.0 different_text_stuff
2 name1 2.0 text_stuff
3 name2 1.0 different_text_stuff
4 name2 1.3 different_text_stuff
5 name2 2.0 still_different_text
6 name2 1.0 yoko ono
7 name2 3.0 I lika da Gweneth
8 name3 1.0 Always a tradeoff
9 name3 3.0 What?!
现在使用
import pandas as pd
df=pd.read_clipboard(sep='\s\s+')
将其加载到您的环境中。如果该数据帧的
textId
组包含至少一个等于1.0、2.0和3.0的score
,如何对该数据帧进行切片,以使全部的行返回特定textId
的行?在这里,所需操作的结果将排除score
行name1,因为其textId
组缺少3.0;而排除name3,因为其score
组缺少2.0: textId score textInfo
0 name2 1.0 different_text_stuff
1 name2 1.3 different_text_stuff
2 name2 2.0 still_different_text
3 name2 1.0 yoko ono
4 name2 3.0 I lika da Gweneth
尝试次数
score
不正确,因为条件不起作用在
df[df.textId == "textIdRowName" & df.score == 1.0 & df.score == 2.0& & df.score == 3.0]
组上,但仅单个行。如果这可能是重写以匹配
textId
组,然后可以将其放置在for循环中,并输入了唯一的textIdRowName。这样的功能
会收集一系列
textId
的名称(例如textId
),然后可以将其用于切片原始df像
textIdThatMatchScore123
一样。 df[df.textId.isin(textIdThatMatchScore123)]
失败。 最佳答案
这是一个解决方案-groupby
textId,然后仅保留那些分数的唯一值是>=
的超集([1.0, 2.0, 3.0]
)的组。
In [58]: df.groupby('textId').filter(lambda x: set(x['score']) >= set([1.,2.,3.]))
Out[58]:
textId score textInfo
3 name2 1.0 different_text_stuff
4 name2 1.3 different_text_stuff
5 name2 2.0 still_different_text
6 name2 1.0 yoko ono
7 name2 3.0 I lika da Gweneth
关于python - 如何根据列组的多(其他列)条件选择数据框行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36605535/