在执行groupby('name')之后我有一个这样的系列,并在其他列上使用mean()函数
name
383 3.000000
663 1.000000
726 1.000000
737 9.000000
833 8.166667
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何过滤出1.000000平均值的行?谢谢你,我非常感谢你的帮助.
And*_*rew 97
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
Run Code Online (Sandbox Code Playgroud)
DAC*_*ACW 42
从pandas版本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()
Run Code Online (Sandbox Code Playgroud)
结帐:http: //pandas.pydata.org/pandas-docs/version/0.18.1/whatsnew.html#method-chaininng-improvements
Gor*_*ean 28
正如DACW所指出的那样,pandas 0.18.1 中的方法链改进可以很好地完成你正在寻找的东西.
.where您可以将函数传递给.loc索引器或系列索引器[],而不是使用它,并避免调用.dropna:
test = pd.Series({
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
})
test.loc[lambda x : x!=1]
test[lambda x: x!=1]
Run Code Online (Sandbox Code Playgroud)
DataFrame和NDFrame类支持类似的行为.
piR*_*red 18
这样做的一种快速方法是重建numpy用于切片底层数组.见下面的时间安排.
mask = s.values != 1
pd.Series(s.values[mask], s.index[mask])
0
383 3.000000
737 9.000000
833 8.166667
dtype: float64
Run Code Online (Sandbox Code Playgroud)
天真的时机
另一种方法是首先转换为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")
Run Code Online (Sandbox Code Playgroud)
如果你喜欢链式操作,你也可以使用compress函数:
test = pd.Series({
383: 3.000000,
663: 1.000000,
726: 1.000000,
737: 9.000000,
833: 8.166667
})
test.compress(lambda x: x != 1)
# 383 3.000000
# 737 9.000000
# 833 8.166667
# dtype: float64
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80664 次 |
| 最近记录: |