在执行groupby('name')并在其他列上使用过mean()函数后,我得到了这样的系列
name
383 3.000000
663 1.000000
726 1.000000
737 9.000000
833 8.166667
谁能告诉我如何过滤出平均值为1.000000的行?谢谢,我非常感谢您的帮助。
Answers:
In [5]:
import pandas as pd
test = {
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
}
s = pd.Series(test)
s = s[s != 1]
s
Out[0]:
383 3.000000
737 9.000000
833 8.166667
dtype: float64
s
,然后在表达式中使用两次)。不过仅适用于熊猫0.18。
从熊猫版本0.18+开始,也可以如下进行过滤
test = {
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
}
pd.Series(test).where(lambda x : x!=1).dropna()
结帐:http : //pandas.pydata.org/pandas-docs/version/0.18.1/whatsnew.html#method-chaininng-improvements
另一种方法是先转换为DataFrame并使用查询方法(假设您已安装numexpr):
import pandas as pd
test = {
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
}
s = pd.Series(test)
s.to_frame(name='x').query("x != 1")
就我而言,我有一个熊猫系列,其值是字符元组:
Out[67]
0 (H, H, H, H)
1 (H, H, H, T)
2 (H, H, T, H)
3 (H, H, T, T)
4 (H, T, H, H)
因此,我可以使用索引来过滤系列,但可以创建所需的索引apply
。我的条件是“查找所有正好为'H'的元组”。
series_of_tuples[series_of_tuples.apply(lambda x: x.count('H')==1)]
我承认它不是“ chainable”的(即注意我重复series_of_tuples
两次;您必须将任何临时序列存储到变量中,以便可以在其上调用apply(...))。
可能还有其他方法(除外.apply(...)
)可以按元素操作以生成布尔索引。
使用可链接函数的许多其他答案(包括已接受的答案),例如:
.compress()
.where()
.loc[]
[]
这些接受适用于Series的可调用项(lambda),而不适用于这些系列中的单个值!
因此,当我尝试将上述条件/可调用/ lambda与任何可链接函数一起使用时,我的系列元组的行为很奇怪,例如.loc[]
:
series_of_tuples.loc[lambda x: x.count('H')==1]
产生错误:
KeyError:“ H级必须与名称相同(无)”
我很困惑,但是似乎正在使用Series.countseries_of_tuples.count(...)
函数,这不是我想要的。
我承认替代数据结构可能更好:
这将创建一系列字符串(即,通过串联元组;将元组中的字符连接到单个字符串上)
series_of_tuples.apply(''.join)
这样我就可以使用链式Series.str.count
series_of_tuples.apply(''.join).str.count('H')==1