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实现非常好的方法的情况。对于大型数据帧,这将非常缓慢