【问题标题】:Creating column based on other row value in dataframe根据数据框中的其他行值创建列
【发布时间】:2021-09-15 05:19:40
【问题描述】:

我有 3 列 Id,item similar_item_id

例如:

Id. Item. Similar_item_id
1.  Pen.      [2,1]
2.  Book.     [1,4]
3. Phone.     4
4.  Laptop.   3

我想创建一个名为similar_item name 的新列,而不是它的Id 喜欢

类似的项目

书,笔 笔、笔记本电脑 笔记本电脑 电话

如何在数据框中创建这个新列

【问题讨论】:

    标签: python pandas dataframe numpy jupyter-notebook


    【解决方案1】:

    一种选择是explode 然后map 使用来自Id.Item. 列的映射器,然后groupby aggregate 回到list

    df['similar_item'] = (
        df['Similar_item_id'].explode()
            .map(dict(zip(df['Id.'], df['Item.'])))
            .groupby(level=0).agg(list)
    )
    

    df:

       Id.    Item. Similar_item_id     similar_item
    0  1.0     Pen.          [2, 1]    [Book., Pen.]
    1  2.0    Book.          [1, 4]  [Pen., Laptop.]
    2  3.0   Phone.               4        [Laptop.]
    3  4.0  Laptop.               3         [Phone.]
    

    或有条件地基于长度:

    df['similar_item'] = (
        df['Similar_item_id'].explode()
            .map(dict(zip(df['Id.'], df['Item.'])))
            .groupby(level=0).agg(lambda g: list(g) if len(g) > 1 else g)
    )
    
       Id.    Item. Similar_item_id     similar_item
    0  1.0     Pen.          [2, 1]    [Book., Pen.]
    1  2.0    Book.          [1, 4]  [Pen., Laptop.]
    2  3.0   Phone.               4          Laptop.
    3  4.0  Laptop.               3           Phone.
    

    DataFrame 构造函数:

    import pandas as pd
    
    df = pd.DataFrame({
        'Id.': [1.0, 2.0, 3.0, 4.0],
        'Item.': ['Pen.', 'Book.', 'Phone.', 'Laptop.'],
        'Similar_item_id': [[2, 1], [1, 4], 4, 3]
    })
    

    【讨论】:

      【解决方案2】:

      试试这样的,没有爆炸快,但更容易理解

      df['out'] = df.Similar_item_id.\
                        apply(lambda x : df.set_index('Id.').loc[x,'Item.'].tolist() 
                                                      if type(x)==list 
                                                      else df.set_index('Id.').loc[x,'Item.'] )
      0      [Book., Pen.]
      1    [Pen., Laptop.]
      2            Laptop.
      3             Phone.
      Name: Similar_item_id, dtype: object
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-03
        • 1970-01-01
        • 2017-01-03
        • 1970-01-01
        • 2021-08-27
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多