将下列数据复制到剪贴板:
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+')把它加载到你的环境中。如果该的score组至少包含一个等于1.0、2.0和3.0的score,那么如何分割这个数据以使返回特定textId的所有行?在这里,所需操作的结果将排除textId行name1,因为它的score组缺少一个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尝试
df[df.textId == "textIdRowName" & df.score == 1.0 & df.score == 2.0 & & df.score == 3.0]是不正确的,因为条件不是对textId组起作用,而是只对单个行起作用。如果可以重写它来与textId组匹配,那么它可以放在一个for循环中,并输入惟一的textIdRowName。这样的函数将在一个系列(比如textIdThatMatchScore123)中收集textId的名称,然后可以用来分割原始的df,比如df[df.textId.isin(textIdThatMatchScore123)]。groupby考试中失败。发布于 2016-04-13 17:41:15
这里有一个解决方案-- 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 Gwenethhttps://stackoverflow.com/questions/36605535
复制相似问题