用于 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 电子表格

pandas 以格式化方式读取 excel

我想要一个 pandas 脚本根据第一个电子表格中的值将一个 excel 表中的值排列到另一个表中

Python中操作Excel最好用的模块是?

Pandas与openpyxl库的超强结合,再见,Excel!