2 回答
TA贡献1777条经验 获得超10个赞
我认为您需要在子集中指定列:
cols = ['ID', 'Email']
for i, group in df.groupby('User'):
group[cols].to_excel('{}.xlsx'.format(i), sheet_name='sheet1', index=False)
如果得到KeyError: 'User'它意味着你想要选择不存在的列。
因此,如果选择列ID和Email,则链接的 groupby 找不到User列并引发错误:
print (df[['ID', 'Email']])
ID Email
0 1 john@email.com
1 2 john@email.com
2 3 john@email.com
3 4 david@email.com
4 5 david@email.com
5 6 fred@email.com
6 7 fred@email.com
7 8 eric@email.com
8 9 terry@email.com
9 10 terry@email.com
所以有必要选择列也在 groupby 中使用:
for i, group in df[['ID', 'Email', 'User']].groupby('User'):
group.to_excel('{}.xlsx'.format(i), sheet_name='sheet1', index=False)
或者在写入文件之前选择列,就像在第一个解决方案中一样。
for i, group in df[['ID', 'Email', 'User']].groupby('User'):
group[cols].to_excel('{}.xlsx'.format(i), sheet_name='sheet1', index=False)
TA贡献1834条经验 获得超8个赞
这是可能的......但不是你这样做的方式。
您正在有效地删除除两列之外的所有列,然后尝试按不再存在的第三列进行分组。相反,您需要在选择列之前进行分组(尽管我不知道分组是否numpy
是一个变异操作,因此您可能需要先进行复制)。
(可能次优)示例:
grp = df[('ID', 'Email', 'User')].groupby('User')[('ID', 'Email')]
添加回答
举报