让我们采用以下DataFrame:
location outlook play players temperature
0 Hamburg sunny True 2.00 25.00
1 Berlin sunny True 2.00 25.00
2 Stuttgart NaN True 4.00 19.00
3 NaN NaN NaN nan nan
4 Flensburg overcast False 0.00 33.00
5 Hannover rain NaN 0.00 27.00
6 Heidelberg rain NaN 0.00 21.50
7 Frankfurt overcast True 2.00 26.00
8 Augsburg sunny True 2.00 13.00
9 Koeln sunny True 2.00 16.00
我跑
g = df(by=["outlook", "play"])
def gfunc(x):
print(x)
g.apply(gfunc)
这是打印的
location outlook play players temperature
4 Flensburg overcast False 0.00 33.00
location outlook play players temperature
4 Flensburg overcast False 0.00 33.00
location outlook play players temperature
7 Frankfurt overcast True 2.00 26.00
location outlook play players temperature
0 Hamburg sunny True 2.00 25.00
1 Berlin sunny True 2.00 25.00
8 Augsburg sunny True 2.00 13.00
9 Koeln sunny True 2.00 16.00
我不介意不归还任何东西;我只是想了解为什么它打印完全相同的输出两次然后输出几个不同的输出。打印输出不应该每次都是不同的子组吗?我错过了什么?
答案 0 :(得分:3)
根据docs
在当前实现中,在第一列/行上应用调用func两次,以确定它是否可以采用快速或慢速代码路径。如果func有副作用,这可能会导致意外行为,因为它们会对第一列/行生效两次。
答案 1 :(得分:1)
请注意,您有一个小错误,您应该写df.groupby(["series"])
而不是df(by=["series"])
。
import seaborn as sns
iris = sns.load_dataset('iris')
现在这个语句打印一个double部分。
iris.ix[1:100:10].groupby(["species"]).apply(lambda x: print(len(x), '\n***\n', x))
输出
5
***
sepal_length sepal_width petal_length petal_width species
1 4.9 3.0 1.4 0.2 setosa
11 4.8 3.4 1.6 0.2 setosa
21 5.1 3.7 1.5 0.4 setosa
31 5.4 3.4 1.5 0.4 setosa
41 4.5 2.3 1.3 0.3 setosa
5
***
sepal_length sepal_width petal_length petal_width species
1 4.9 3.0 1.4 0.2 setosa
11 4.8 3.4 1.6 0.2 setosa
21 5.1 3.7 1.5 0.4 setosa
31 5.4 3.4 1.5 0.4 setosa
41 4.5 2.3 1.3 0.3 setosa
5
***
sepal_length sepal_width petal_length petal_width species
51 6.4 3.2 4.5 1.5 versicolor
61 5.9 3.0 4.2 1.5 versicolor
71 6.1 2.8 4.0 1.3 versicolor
81 5.5 2.4 3.7 1.0 versicolor
91 6.1 3.0 4.6 1.4 versicolor
更奇怪的是,如果我要求这个名字,它不会使印刷品加倍。
iris.ix[1:100:10].groupby(["species"]).apply(lambda x: print(len(x), x.name, '\n***\n', x))
输出
5 setosa
***
sepal_length sepal_width petal_length petal_width species
1 4.9 3.0 1.4 0.2 setosa
11 4.8 3.4 1.6 0.2 setosa
21 5.1 3.7 1.5 0.4 setosa
31 5.4 3.4 1.5 0.4 setosa
41 4.5 2.3 1.3 0.3 setosa
5 versicolor
***
sepal_length sepal_width petal_length petal_width species
51 6.4 3.2 4.5 1.5 versicolor
61 5.9 3.0 4.2 1.5 versicolor
71 6.1 2.8 4.0 1.3 versicolor
81 5.5 2.4 3.7 1.0 versicolor
91 6.1 3.0 4.6 1.4 versicolor
好。你有我的!看起来像一个奇怪的bug。