用于 Excel 电子表格的 Pandas groupby
Posted
技术标签:
【中文标题】用于 Excel 电子表格的 Pandas groupby【英文标题】:Pandas groupby for excel spreadsheet 【发布时间】:2019-08-11 10:35:53 【问题描述】:我有一个如下所示的电子表格(大约 1800 行),它是从一个从 Access 数据库中提取信息的 python 脚本生成的:
ID Chemical Association Term
1 1,1-Dichloroethene exactMatch 1,1-Dichloroethylene
1 1,1-Dichloroethene exactMatch Vinylidene Chloride
2 1,2 Epoxyethane exactMatch Ethylene oxide
2 1,2 Epoxyethane exactMatch Ethylene oxide (1,2 Epoxyethane)
我可能想使用 pandas 来更改此电子表格的布局。我想创建一个这样的表:
ID Chemical Association Term (new column)
1 1,1-Dichloroethene exactMatch 1,1-Dichloroethylene Vinylidene Chloride
2 1,2 Epoxyethane exactMatch Ethylene oxide (1... Ethylene oxide
到目前为止,我已经使用 pandas 编写了以下内容,但不确定下一步该做什么:
data = pd.read_excel('Chemicals_exactMatch.xlsx', sheet_name='Sheet1')
df = pd.DataFrame(data)
grp = df.groupby(['ID','Chemical','Association'])
我认为需要将以下陈述纳入其中,但我不确定如何:
df.apply(lambda grouped: grouped['Term'].str.cat(sep="|"))
df.str.split(pat="|")
【问题讨论】:
【参考方案1】:我已经设法编写了以下有效的代码:
data = pd.read_excel(spreadsheet, sheet_name='Sheet1')
df = (pd.DataFrame(data)
.groupby(['ID','Chemical','Association'])
.apply(lambda grouped: grouped['Term'].str.cat(sep="!"))
.str.split(pat="!", expand=True)
.sort_values('Chemical')
.to_excel('Chemicals_exactMatch.xlsx'))
【讨论】:
【参考方案2】:试试这个:
df.set_index(['ID',
'Chemical',
'Association',
df.groupby(['ID','Chemical','Association']).cumcount()])['Term']\
.unstack().reset_index()
输出:
ID Chemical Association 0 1
0 1 1,1-Dichloroethene exactMatch 1,1-Dichloroethylene Vinylidene Chloride
1 2 1,2 Epoxyethane exactMatch Ethylene oxide Ethylene oxide (1,2 Epoxyethane)
【讨论】:
我使用什么打印语句来生成此输出以及如何将其保存为新的/更新的电子表格? 您可以在末尾添加.to_excel('filename.xlsx')
以将该数据框输出到 Excel 文件。以上是关于用于 Excel 电子表格的 Pandas groupby的主要内容,如果未能解决你的问题,请参考以下文章
将excel电子表格读入pandas DataFrame时将数字转换为字符串
Pandas:使用合并的单元格和空白值解析 Excel 电子表格