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分):
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分):