微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Pandas 中的数据框中查找和链接值

如何解决在 Pandas 中的数据框中查找和链接值

在 Pandas 数据框中,例如:

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

我将如何匹配 Like 和 dislike 列中的水果并创建一个 df 或谁应该与谁交易的列表?

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

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



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

我最纠结的部分是匹配查找,我了解如何比较行和列,但是整个 DF 中的单个值是一个难题,似乎这里需要一些递归方法。 谢谢。

解决方法

这是关系数据库使用的标准连接/合并操作。下面,我在“喜欢”、“不喜欢”列上将数据框加入到自身中,并将它们重命名:

public ItemViewModel()
    {
        ListOfItems = new ObservableCollection<ItemModel>();
        OpenAddItemWindowCommand = new RelayCommand(OpenAddItemWindow);
        CreateItemCommand = new RelayCommand(CreateItem);
    }

    private ObservableCollection<ItemModel> _listOfItems;
    public ObservableCollection<ItemModel> ListOfItems { get { return _listOfItems; } set { _listOfItems = value; OnPropertyChanged("ListOfItems"); } }

输出:

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"]]
,

我想这个会帮助你:

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']]

返回结果:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。