【问题标题】:Conditionally replace values in list of arrays in a pandas dataframe有条件地替换熊猫数据框中数组列表中的值
【发布时间】:2021-01-14 10:33:46
【问题描述】:

我想有条件地替换包含一系列数组的列中的值。

下面的示例数据集:(我的真实数据集包含更多的列和行)

index   lists                                  condition
0       ['5 apples', '2 pears']                B
1       ['3 apples', '3 pears', '1 pumpkin']   A
2       ['4 blueberries']                      A
3       ['5 kiwis']                            C
4       ['1 pumpkin']                          B
...     ...                                    ...

例如,如果条件是A,并且该行包含“1 个南瓜”,那么我想将值替换为XXX。但是如果条件是B并且该行包含1 pumpkin,那么我想将值替换为YYY

期望的输出

index   lists                                  condition
0       ['5 apples', '2 pears']                B
1       ['3 apples', '3 pears', 'XXX']         A
2       ['4 blueberries']                      A
3       ['5 kiwis']                            C
4       ['YYY']                                B
...     ...                                    ...

事实上,目标是替换所有这些值,但1 pumpkin 只是一个示例。重要的是,我想维护数组结构。谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    让我们先explode 然后np.select

    s = df.explode('lists')
    cond = s['lists']=='1 pumpkin'
    c1 = cond&s['condition'].eq('A')
    c2 = cond&s['condition'].eq('B')
    s['lists'] = np.select([c1,c2],['XXX','YYY'],default = s.lists.values )
    df['lists'] = s.groupby(level=0)['lists'].agg(list)
    

    【讨论】:

      【解决方案2】:

      您可以使用要应用于Dataframe 的逻辑定义一个函数,然后调用df.apply(function) 将此逻辑传递给df

      def pumpkin(row):
      
          if '1 pumpkin' in row['lists']:
              data = row['lists'][:]
              if row['condition'] == 'A':
                  data[data.index('1 pumpkin')] = 'XXX'
              elif row['condition'] == 'B':
                  data[data.index('1 pumpkin')] = 'YYY'
              return data
          return row['lists']
      
      df['lists'] = df.apply(pumpkin, axis=1)
      

      输出

                            lists condition
      0       [5 apples, 2 pears]         B
      1  [3 apples, 3 pears, XXX]         A
      2           [4 blueberries]         A
      3                 [5 kiwis]         C
      4                     [YYY]         B
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-11
        • 2016-11-08
        • 1970-01-01
        • 2018-02-11
        • 2019-07-31
        • 2018-09-29
        • 2022-01-11
        相关资源
        最近更新 更多