pandas groupby().size(),转excel折线图

pandas groupby().size(), to excel line graph

random_df
Line Generation SNP-1 SNP-2 SNP-3 SNP-4
A 2020A A A A A
B 2020B A C T G
C 2020C A C T G
D 2020D A C T G
A 2020A A A A A
data = {'Line': ['A', 'B', 'C', 'D', 'A'], 'Generation': ['2020A', '2020B', '2020C', '2020D', '2020A'],
        'SNP-1': ['A', 'A', 'A', 'A', 'A'], 
        'SNP-2': ['A', 'C', 'C', 'C', 'A'],
        'SNP-3': ['A', 'T', 'T', 'T', 'A'],
        'SNP-4': ['A', 'G', 'G', 'G', 'A']
       }
random_df = pd.DataFrame(data)  

grp = random_df.set_index(["Line", "Generation"]).apply(tuple, axis=1).reset_index(drop=True)

hap_groups = random_df.groupby(["Line", "Generation", grp]).size()

如何使用此对象为每个组制作折线图?在理想情况下,它会被写入电子表格,但如果我可以在 pandas 中绘制图表,那就太好了。稍后会弄清楚如何添加到电子表格。

groupby().size() 显示 this 并且您可以看到 2020A 有 2 个

IIUC,可以使用seaborn.lineplot:

import seaborn as sns
df = (hap_groups
      .reset_index(name='count')
      .assign(generation=lambda d: d['Generation'].str.extract('^(\d+)').astype(int))
     )
sns.lineplot(data=df, x='generation', y='count', hue='Line', marker='o')

输出(这里只有2分):