Python Groupby和仅选定列
这里我读了一个文件“userdata.xlsx”: 在这里,我按用户分组,按用户创建电子表格,并将其输出为自己的.xlsx文件,如下所示:Python Groupby和仅选定列,python,python-3.x,pandas,python-2.7,Python,Python 3.x,Pandas,Python 2.7,这里我读了一个文件“userdata.xlsx”: 在这里,我按用户分组,按用户创建电子表格,并将其输出为自己的.xlsx文件,如下所示: ID Debt Email Age User 1 7.5 john@email.com 16 John 2 15 john@email.com 15 John 以下是完整的代码: #!/usr/bin/env python3 import pandas as pd import numpy as np
ID Debt Email Age User
1 7.5 john@email.com 16 John
2 15 john@email.com 15 John
以下是完整的代码:
#!/usr/bin/env python3
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import xlrd
df = pd.read_excel('userdata.xlsx')
grp = df.groupby('User')
for group in grp.groups:
grouptofile = (grp.get_group(group))
print(grouptofile)
print(group)
grouptofile.to_excel('%s.xlsx' % group , sheet_name='sheet1', index=False)
现在我只想保存为每个用户保存的选定列。假设我只想选择“ID”和“Email”列。我学会了如何只选择某些列,如下所示:
selected = df[['ID','Email']]
我现在认为在这里添加ID和电子邮件是有意义的
grp = df.groupby('User')
添加了“ID”和“电子邮件”
甚至可以组合groupby和select列吗
#!/usr/bin/env python3
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import xlrd
df = pd.read_excel('userdata.xlsx')
grp = df[['ID', 'Email']].groupby('User')
for group in grp.groups:
grouptofile = (grp.get_group(group))
print(grouptofile)
print(group)
grouptofile.to_excel('%s.xlsx' % group , sheet_name='sheet1', index=False)
这是我得到的错误:
Traceback (most recent call last):
File "/Users/Barry/Documents/Python/Pandas/exelscript.py", line 22, in <module>
grp = df[['ID', 'Email']].groupby('User')
File "/usr/local/lib/python3.7/site-packages/pandas/core/generic.py", line 6665, in groupby
observed=observed, **kwargs)
File "/usr/local/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 2152, in groupby
return klass(obj, by, **kwds)
File "/usr/local/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 599, in __init__
mutated=self.mutated)
File "/usr/local/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 3291, in _get_grouper
raise KeyError(gpr)
KeyError: 'User'
回溯(最近一次呼叫最后一次):
文件“/Users/Barry/Documents/Python/Pandas/exelscript.py”,第22行,在
grp=df[['ID','Email']].groupby('User'))
groupby中的文件“/usr/local/lib/python3.7/site packages/pandas/core/generic.py”,第6665行
观察到的=观察到的,**千克)
groupby中的文件“/usr/local/lib/python3.7/site packages/pandas/core/groupby/groupby.py”,第2152行
返回klass(obj,由,**科威特先令)
文件“/usr/local/lib/python3.7/site packages/pandas/core/groupby/groupby.py”,第599行,在__
变异的
文件“/usr/local/lib/python3.7/site-packages/pandas/core/groupby/groupby.py”,第3291行,在grouper中
raise KeyError(探地雷达)
KeyError:'用户'
有可能。。。但不太清楚你是怎么做的
您实际上删除了除两列以外的所有列,然后尝试按不再存在的第三列进行分组。相反,您需要在选择列之前进行分组(尽管我不知道在numpy
中分组是否是一种变异操作,因此您可能需要先进行复制)
(可能是次优)示例:
我认为您需要在子集中指定列:
cols = ['ID', 'Email']
for i, group in df.groupby('User'):
group[cols].to_excel('{}.xlsx'.format(i), sheet_name='sheet1', index=False)
如果getKeyError:'User'
表示您希望选择不存在的列
因此,如果选择列ID
和Email
,则chained 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)
工作原理与前面的代码相同。但是它仍然输出所有的栏目,而不仅仅是“ID”和“Email”。Thx先生,如果你有时间,你能解释一下吗?只是为了让像你这样的无名小卒明白me@Barry-当然,没问题:)
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
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)