Один из способов сделать это:
- Превратите свои имена пользователей и лайки, а также имена пользователей2 и лайки2 в 2 словаря {username, Like} и {username2 ,like2}
- Добавить значения совпадающих ключей, а ключи, которые не совпадают, не будут иметь ничего добавленного к ним. Превратите это в новую серию под названием
usernamesandlikes
. usernameandlikes
содержит все имена пользователей и суммированные лайки для оставшихся 4 столбцов, поэтому все, что вам нужно сделать, это отфильтровать их в соответствующие столбцы, используя список intersection
для username3 и symmetric_difference
список для имени пользователя4
Код для этого ниже:
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