我有一个数据框,我想绘制一个折线图来及时显示每个文件的大小。目前我只是在绘制 1 行。但是我怎样才能绘制所有文件呢?我想我必须修改数据框的形状。import pandas as pddf = pd.DataFrame({ 'file_type': ['file'] * 1 + ['file.png'] * 1 + ['file.PNG'] * 1 + ['file.csv'] * 2, 'size': [11] * 5, 'created_at': ['2020-01-01 23:00:34'] *1 + ['2020-02-01 23:00:34'] * 2 + ['2020-03-01 23:00:34']*1 + ['2019-01-02 23:00:34']})df['created_at'] = pd.to_datetime(df['created_at']).dt.normalize()group1= df['file_type'].str.lower().str.extract(r'(\.\w+$)', expand=False).fillna('unknown')group2 = df['created_at'].dt.strftime('%Y-%m')df.groupby([group1, group2])['size'].sum().reset_index()import matplotlib.pyplot as pltimport seaborn as sns# Use seaborn style defaults and set the default figure sizesns.set(rc={'figure.figsize':(20, 4)})df['size'].plot(linewidth=0.5);
2 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
您可以seaborn.lineplot使用hue:
import seaborn as sns
sns.lineplot(data=df, x='created_at', y='size', hue='file_name')
要为每种文件类型设置多行,请执行以下操作:
# do not reset index but unstack:
(df.groupby([group1, group2])['size'].sum()
.unstack(level=0).plot(subplots=True)
)
慕工程0101907
TA贡献1887条经验 获得超5个赞
你可以像这样简单地做到这一点sns.lineplot()
:
import seaborn as sns
sns.set(style='darkgrid')
sns.lineplot(x='created_at', y='size', data=df)
添加回答
举报
0/150
提交
取消