Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Groupby和仅选定列_Python_Python 3.x_Pandas_Python 2.7 - Fatal编程技术网

Python Groupby和仅选定列

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

这里我读了一个文件“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
    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)
如果get
KeyError:'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)