如何比较和导出多个csv文件PYTHON中的唯一值

时间:2018-01-16 19:03:56

标签: python excel pandas csv dataframe

您好我是Python的新手并尝试过搜索,但未成功。

我有一个包含内容的excel文件,如下所示

employee_number      email          System
807             marg.prent@test.com System1
8304            bill.riley@test.com System1 
10441           doug.wever@test.com System1
12374           Rich.flipt@test.com System2 
14012           doug.wever@test.com System2 
15906           marg.prent@test.com System2
16223           mark.johns@test.com System3
82189           doug.wever@test.com System3
86099           krish.ragg@test.com System3
86646           marg.prent@test.com System4 
87165           doug.wever@test.com System4
87844           jose.taver@test.com System4
88165           doug.wever@test.com System5
87944           jared.Rich@test.com System5 
87944           John.taver@test.com System5

如果一名员工在3个以上的系统中,我希望将其从原始数据框中删除,并为这些员工及其所在的系统创建一个新的dataFrame。

到目前为止,我有:

`import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
df = pd.read_excel('file.xlsx')

EmailSysList = df[['email','System']]

for x in EmailSysList['email']:
    if EmailSysList['System'] == "System 1 ":

我明白这不是很多,可能是完全错误的方法,但如果有人能指出我正确的方向,那将非常感激

2 个答案:

答案 0 :(得分:1)

所以可能有很多方法可以在这里提出解决方案。我将transformgroupby一起使用。

让我们首先过滤数据框,以获取超过3个系统的用户。既然你说没有重复,我们可以简单地使用计数!

more_than_3 = df1[df1.groupby('email')['email'].transform('count') > 3].sort_values(['email', 'System'])
# sort values is just making the output more readable and put everything in order.
# output below
    employee_number email   System
2   10441   doug.wever@test.com System1
4   14012   doug.wever@test.com System2
7   82189   doug.wever@test.com System3
10  87165   doug.wever@test.com System4
12  88165   doug.wever@test.com System5

然后我们简单地颠倒其他人的逻辑:

others = df1[df1.groupby('email')['email'].transform('count') <= 3].sort_values(['email', 'System'])
# output
    employee_number email   System
14  87944   John.taver@test.com System5
3   12374   Rich.flipt@test.com System2
1   8304    bill.riley@test.com System1
13  87944   jared.Rich@test.com System5
11  87844   jose.taver@test.com System4
8   86099   krish.ragg@test.com System3
0   807     marg.prent@test.com System1
5   15906   marg.prent@test.com System2
9   86646   marg.prent@test.com System4
6   16223   mark.johns@test.com System3

要将这些数据框发送到Excel,您可以使用pd.to_excel()。此外,如果您在同一工作簿中需要它们,请使用sheetname参数。

答案 1 :(得分:0)

groupby和count()为您提供所需的电子邮件,然后您可以使用该系列分割初始DataFrame。

morethan3emails = (df.groupby('email', as_index=False)
                     .System
                     .count()
                     .query('System > 3')
                     .email)

morethan3df = df[df.email.isin(morethan3emails)]
lessthan4df = df[~df.email.isin(morethan3emails)]