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

2024-09-24 22:30:29 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我对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个以上的系统中,我想将他们从原始数据框中删除,并用这些雇员和他们所在的系统创建一个新的数据框。你知道吗

到目前为止,我已经:

`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 ":

我知道这是不多,可能是完全错误的方法,但如果有人能给我指出正确的方向,将不胜感激


Tags: testimportcompandasemailsystemdougsystem1
2条回答

groupby and count()会提供所需的电子邮件,然后您可以使用该序列来拆分初始数据帧。你知道吗

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)]

所以这里可能有很多方法可以解决这个问题。我将使用^{}^{}。你知道吗

让我们首先过滤数据帧,以获得在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,可以使用^{}。此外,如果在同一工作簿中需要它们,请使用sheetname参数。你知道吗

相关问题 更多 >