Python 在数据框中查找和链接值

Python 在数据框中查找和链接值,python,pandas,dataframe,matching,Python,Pandas,Dataframe,Matching,在数据帧中,例如: data = [['Ben', 'Apple', 'Banana'], ['Nancy', 'Pear', 'Apple'], ['Paul', 'Banana', 'Mango'], ['Sally', 'Mango', 'Pear']] df = pd.DataFrame(data, columns = ['Name', 'Like', 'Dislike']) df Name Like Dislike 0 Ben Apple B

在数据帧中,例如:

data = [['Ben', 'Apple', 'Banana'], ['Nancy', 'Pear', 'Apple'], ['Paul', 'Banana', 'Mango'], ['Sally', 'Mango', 'Pear']] 
df = pd.DataFrame(data, columns = ['Name', 'Like', 'Dislike']) 
df 

    Name    Like    Dislike
0   Ben     Apple   Banana
1   Nancy   Pear    Apple
2   Paul    Banana  Mango
3   Sally   Mango   Pear
我如何匹配“喜欢”和“不喜欢”列中的水果,并创建一个df或谁应该与谁交易的列表

我想返回类似以下内容的df:

trades = [['Ben', 'Paul'], ['Paul', 'Sally'], ['Sally', 'Nancy'], ['Nancy', 'Ben']]
tradesDF = pd.DataFrame(trades, columns = ['From', 'To'])



    From    To
0   Ben     Paul
1   Paul    Sally
2   Sally   Nancy
3   Nancy   Ben
我最头疼的部分是匹配查找,我知道如何比较行和列,但是DF中的单个值是一个难题,这里似乎需要一些递归方法。
谢谢。

这是关系数据库使用的标准联接/合并操作。下面,我在“喜欢”、“不喜欢”列中加入了dataframe,并将其重命名:

df2 = pd.merge(left=df, right=df, left_on="Dislike", right_on="Like")
df2 = df2.rename(columns={"Name_x":"From", "Name_y":"To"})[["From", "To"]]
输出:

    From     To
0    Ben   Paul
1  Nancy    Ben
2   Paul  Sally
3  Sally  Nancy

我想这个会帮助你:

trades=[]
for i in range(len(df)):
    if df.iloc[i]["Dislike"] in df["Like"].values:
        trades.append((df.iloc[i]["Name"],(df["Name"][df.iloc[i]["Dislike"] == df.Like.values]).item()))

您可以在
Dislike=Like
上使用自联接/合并,并返回名称:

df_trade = df.merge(df, left_on='Dislike', right_on='Like',suffixes=('_from', '_to'))
df_trade.loc[:,['Dislike_from','Name_from','Name_to']]
将返回结果:


使用dataframe数据结构会很困难,类最好与person、like、Refect一起使用attributes@VisheshMangla这绝对是一种关系数据类型通过mergeFYI实现非常好的方法的情况。对于大型数据帧,这将非常缓慢