Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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 3.x 在Python3中向列表添加唯一分类器时避免笛卡尔_Python 3.x_Filter_Merge_Unique_Cartesian Product - Fatal编程技术网

Python 3.x 在Python3中向列表添加唯一分类器时避免笛卡尔

Python 3.x 在Python3中向列表添加唯一分类器时避免笛卡尔,python-3.x,filter,merge,unique,cartesian-product,Python 3.x,Filter,Merge,Unique,Cartesian Product,我正在导入5.csv文件,所有文件都包含电子邮件: Donors = pd.read_csv(r"C:\Users\am\Desktop\email parsing\Q1 2021\Donors Q1 2021 R12.csv", usecols=["Email Address"]) Activists = pd.read_csv(r"C:\Users\am\Desktop\email parsin

我正在导入5.csv文件,所有文件都包含电子邮件:

Donors = pd.read_csv(r"C:\Users\am\Desktop\email parsing\Q1 2021\Donors Q1 2021 R12.csv",
                        usecols=["Email Address"])
Activists = pd.read_csv(r"C:\Users\am\Desktop\email parsing\Q1 2021\Activists Q1 2021 R12.csv",
                        usecols=["Email"])
Low_Level_Activists = pd.read_csv(r"C:\Users\am\Desktop\email parsing\Q1 2021\Low Level Activists Q1 2021 R12.csv",
                        usecols=["Email"]) 
Ambassadors = pd.read_csv(r"C:\Users\am\Desktop\email parsing\Q1 2021\Ambassadors Q1 2021.csv",
                        usecols=["Email Address"])
Volunteers = pd.read_csv(r"C:\Users\am\Desktop\email parsing\Q1 2021\Volunteers Q1 2021 R12.csv",
                        usecols=["Email Address"])
 Followers= pd.read_csv(r"C:\Users\am\Desktop\email parsing\Q1 2021\Followers Q1 2021 R12.csv",
                        usecols=["Email"])
虽然我只是导入电子邮件(由于它们来自于两个不同的命名约定,这让我很恼火),但我将导入名称添加为一个分类符-即捐赠者、志愿者等

Donors['Value'] = "Donors"
Activists['Value'] = "Activists"
Low_Level_Activists['Value'] = "Low_Level_Activists"
Ambassadors['Value'] = "Ambassadors"
Volunteers['Value'] = "Volunteers"
Advocates['Value'] = 'Followers'
然后连接所有文件并处理命名问题。我相信有一种更优雅的方法可以做到这一点,但我有以下几点:

S1= pd.concat([Donors,Activists,Low_Level_Activists,Ambassadors,Volunteers,Advocates], ignore_index= True) 
S1['Handle'] = S1['Email Address'].where(S1['Email Address'].notnull(), S1['Email'])
S1= S1.drop(['Email','Email Address'], axis = 1)
print(S1['Handle'].count()) #checks full count
最后一行的总数是166749

这是我的问题。我需要过滤电子邮件中的uniques-使用.nuniques()非常简单,但是我遇到的问题是我还需要携带分类器。因此,如果一封单一的电子邮件既是捐赠者又是活动家,那么当我尝试将唯一值与分类器合并时,我会同时提取这两个值

我已经做了很多个小时了(直到互联网的尽头!),似乎找不到一个可行的解决方案。我在字典里无限地查找循环、合并等。唯一的电子邮件数是165923(通过Python和/或excel()计算得出)

从本质上说,我希望在匹配中提取列表中最早的分类器。因此,如果电子邮件是捐赠者和活动家->称他们为捐赠者。或者如果电子邮件是志愿者和追随者->在一个电子邮件记录中称他们为志愿者


任何帮助都将不胜感激。

我将尝试使用一些虚构的数据:

将熊猫作为pd导入
fa=pd.DataFrame([[]paul@mail.com“,”捐赠者“,[”max@mail.com“,”捐赠者“]],列=[”句柄“,”值“])
fb=pd.DataFrame([[]paul@mail.com“,”活动家“],[”annie@mail.com“,”活动者“]],列=[”句柄“,”值“])
S1=局部混凝土([fa,fb])
打印(S1)
给予

您可以按
句柄
分组,然后选择您喜欢的任何
,例如第一个:

对于句柄,在S1中分组。groupby('handle'):
打印(句柄,组.reset_index().loc[0,'值']))
给予

或收集一个人的所有角色:

for handle, group in S1.groupby('Handle'):
    print(handle, group.Value.unique())
给予


你能发布一些可复制的样本数据吗?效果很好。我唯一的问题是,我应该更具体地说明我所寻找的最终结果。具体来说,我想按值分组并计算句柄(重复数据消除)。为此,我将您的代码附加到列表中,然后转换为pd.Series,然后在添加的逗号上使用str.split。在重复数据后按值分组时,我遇到了“结束交易”的问题。我不确定我是否完全理解,但如果您想计算每个值的唯一电子邮件,在按值分组后,您可以使用
len(group.Handle.unique())
正确。那么在您编写代码而不是使用打印后会出现这种情况吗?我想您的打印结构是正确的,我只是不确定如何(1)希望避免使用会使我的处理时间慢很多的追加和(2)如果我不打印代码,该如何处理它。您可以通过使用列表理解来避免追加,或者甚至可以动态创建一个dict,然后将其转换为一个系列:
pd.series({value:len(group.Handle.unique())for value,group in S1.groupby('value')})
动态字典很不错,但出于某种原因,它似乎没有抓住Unique。在我的文件中,我有166727封未经处理的电子邮件,当我使用此代码时,出于某种原因,我得到了相同的数字。不过,你是对的-动态字典在性能方面更优越。
annie@mail.com Activists
max@mail.com Donors
paul@mail.com Donors
for handle, group in S1.groupby('Handle'):
    print(handle, group.Value.unique())
annie@mail.com ['Activists']
max@mail.com ['Donors']
paul@mail.com ['Donors' 'Activists']