【发布时间】:2020-09-27 13:02:26
【问题描述】:
我正在学习在 pandas 中使用 .pipe 方法,想知道我们是否可以使用它来绘制每组 groupby 的 distplot。
MWE
import numpy as np
import pandas as pd
import seaborn as sns
# data
np.random.seed(100)
data = {'year': np.random.choice([2016, 2018, 2020], size=400),
'item': np.random.choice(['Apple', 'Banana', 'Carrot'], size=400),
'price': np.random.random(size=400)}
df = pd.DataFrame(data)
# distplots
for year in df['year'].unique():
x = df['price'][df['year'] == year]
sns.distplot(x, hist=False, rug=True)
问题
我们可以使用 pandas groupby 而不使用 for 循环来获得相同的情节吗?
我的尝试:
df.groupby('year').pipe(lambda dfx: sns.distplot(dfx['price']))
# TypeError: cannot convert the series to <class 'float'>
# df[['year','price']].groupby('year').pipe(sns.distplot)
# TypeError: float() argument must be a string or a number, not 'DataFrame'
需要的输出
【问题讨论】: