Python 使用2列数据创建4个新csv列

Python 使用2列数据创建4个新csv列,python,pandas,csv,Python,Pandas,Csv,我有一个有4列的csv,并把它放进熊猫 username likes username2 likes2 Mill 2 John 10 John 3 Clyde 2 Tye 7 Ellie 4 Clyde 8 Mill 9 Ellie 2 Ken 2 我正在尝试创建四个新列: username3,其中包含名称

我有一个有4列的csv,并把它放进熊猫

username   likes  username2   likes2

Mill       2      John        10
John       3      Clyde       2 
Tye        7      Ellie       4
Clyde      8      Mill        9
Ellie      2      Ken         2
我正在尝试创建四个新列:


  • username3
    ,其中包含名称位于
    username
    username2
    中的所有用户的列表

  • like3
    加上这些用户的
    likes
    likes2
    数字

  • username4
    在任一列表中只出现一次的用户列表

  • likes4
    这些用户的喜好保持不变

  • 期望输出: 一种方法是:

    • 将您的用户名和喜好以及用户名2和喜好2转换为{username,likes}和{username2,likes2}两个字典
    • 添加匹配键的值,不匹配的键将不会添加任何内容。将其转换为一个名为
      usernamesandlikes
      的新系列
    • usernameandlikes
      包含剩余4列的所有用户名和汇总的喜欢项,因此您需要做的就是使用username3的
      交集
      列表和username4的
      symmetric_difference
      列表将它们过滤到各自的列中
    执行此操作的代码如下所示:

    import pandas as pd
    import numpy as np
    import collections, functools, operator 
    
    df = pd.read_csv("your_file.csv")
    
    usernameandlikes = pd.Series(dict(functools.reduce(operator.add, map(collections.Counter, [dict(zip(df["username"], df["likes"])),  dict(zip(df["username2"], df["likes2"]))])))).reset_index() 
    usernameandlikes.columns = ["users", "likes"]
    
    username3_likes3 = usernameandlikes.loc[usernameandlikes['users'].isin(list(set(df["username"]).intersection(set(df["username2"]))))].reset_index(drop=True)
    
    username3_likes4 = usernameandlikes.loc[usernameandlikes['users'].isin(list(set(df["username"]).symmetric_difference(set(df["username2"]))))].reset_index(drop=True)
    
    dfoutput = pd.concat([df, username3_likes3, username3_likes4], axis=1)
    dfoutput.columns = ["username", "likes", "username2", "likes2", "username3", "likes3", "username4", "likes4"]
    
      username  likes username2  likes2 username3  likes3 username4  likes4
    0     Mill      2      John      10      Mill    11.0       Tye     7.0
    1     John      3     Clyde       2      John    13.0       Ken     2.0
    2      Tye      7     Ellie       4     Clyde    10.0       NaN     NaN
    3    Clyde      8      Mill       9     Ellie     6.0       NaN     NaN
    4    Ellie      2       Ken       2       NaN     NaN       NaN     NaN
    
    一种方法是:

    • 将您的用户名和喜好以及用户名2和喜好2转换为{username,likes}和{username2,likes2}两个字典
    • 添加匹配键的值,不匹配的键将不会添加任何内容。将其转换为一个名为
      usernamesandlikes
      的新系列
    • usernameandlikes
      包含剩余4列的所有用户名和汇总的喜欢项,因此您需要做的就是使用username3的
      交集
      列表和username4的
      symmetric_difference
      列表将它们过滤到各自的列中
    执行此操作的代码如下所示:

    import pandas as pd
    import numpy as np
    import collections, functools, operator 
    
    df = pd.read_csv("your_file.csv")
    
    usernameandlikes = pd.Series(dict(functools.reduce(operator.add, map(collections.Counter, [dict(zip(df["username"], df["likes"])),  dict(zip(df["username2"], df["likes2"]))])))).reset_index() 
    usernameandlikes.columns = ["users", "likes"]
    
    username3_likes3 = usernameandlikes.loc[usernameandlikes['users'].isin(list(set(df["username"]).intersection(set(df["username2"]))))].reset_index(drop=True)
    
    username3_likes4 = usernameandlikes.loc[usernameandlikes['users'].isin(list(set(df["username"]).symmetric_difference(set(df["username2"]))))].reset_index(drop=True)
    
    dfoutput = pd.concat([df, username3_likes3, username3_likes4], axis=1)
    dfoutput.columns = ["username", "likes", "username2", "likes2", "username3", "likes3", "username4", "likes4"]
    
      username  likes username2  likes2 username3  likes3 username4  likes4
    0     Mill      2      John      10      Mill    11.0       Tye     7.0
    1     John      3     Clyde       2      John    13.0       Ken     2.0
    2      Tye      7     Ellie       4     Clyde    10.0       NaN     NaN
    3    Clyde      8      Mill       9     Ellie     6.0       NaN     NaN
    4    Ellie      2       Ken       2       NaN     NaN       NaN     NaN
    

    在列
    username
    或列
    username2
    中是否存在重复项?一种方法是将第一个csv拆分为两个数据帧,并对每个数据帧进行内部和外部合并,然后将相似项相加,删除不需要的列,并连接所有数据帧。
    username
    username2
    没有重复项,在完整的数据集中,它们确实有NaN。在列
    username
    或列
    username2
    中是否有重复项?一种方法是将第一个csv拆分为两个数据帧,并对每个数据帧进行内部和外部合并,然后将相似项相加,删除不需要的列,并连接所有数据帧。
    username
    username2
    没有重复项,它们在完整的数据集中有NaN。对于第一行代码,它不断返回:“method”对象不可订阅您使用的python版本是什么?我无法重现您的issuepython3我假设您运行的是sameyeah,3.8.2-明确地说,您所说的是pd.read_csv()之后的那一行,它构建了字典?我运行的是3.7.7-啊,我在代码中没有将输入更改为df。现在,pd.read\u csv之后的第一行代码给出了TypeError:对于它不断返回的第一行代码,只能将str(而不是“int”)连接到strf:“method”对象不是subscriptablePython的哪个版本?我无法重现您的issuepython3我假设您运行的是sameyeah,3.8.2-明确地说,您所说的是pd.read_csv()之后的那一行,它构建了字典?我运行的是3.7.7-啊,我在代码中没有将输入更改为df。现在,pd.read_csv后面的第一行代码给出了TypeError:只能将str(而不是“int”)连接到str