Python 使用2列数据创建4个新csv列
我有一个有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,其中包含名称
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
包含剩余4列的所有用户名和汇总的喜欢项,因此您需要做的就是使用username3的usernameandlikes
列表和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
包含剩余4列的所有用户名和汇总的喜欢项,因此您需要做的就是使用username3的usernameandlikes
列表和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