【问题标题】:remove elements from list based on index in pandas Dataframe根据 Pandas Dataframe 中的索引从列表中删除元素
【发布时间】:2018-12-31 23:04:56
【问题描述】:

如何根据 pandas Dataframe 中的索引范围从列表中删除元素。

假设DataFrame就像

df:

    values           size
0  [1,2,3,4,5,6,7]    2     #delete first 2 elements from list
1  [1,2,3,4]          3     #delete first 3 elements from list
2  [9,8,7,6,5,4,3]    5     #delete first 5 elements from list

预期输出是

df:

    values           size
0  [3,4,5,6,7]        2
1  [4]                3
2  [4,3]              5

【问题讨论】:

    标签: python python-2.7 pandas numpy dataframe


    【解决方案1】:

    将列表推导与索引结合使用:

    df['values'] = [i[j:] for i, j in zip(df['values'], df['size'])]
    print (df)
                values  size
    0  [3, 4, 5, 6, 7]     2
    1              [4]     3
    2           [4, 3]     5
    

    【讨论】:

      【解决方案2】:

      使用df.apply

      import pandas as pd
      df = pd.DataFrame({"values": [[1,2,3,4,5,6,7], [1,2,3,4],  [9,8,7,6,5,4,3]], "size": [2, 3, 5]})
      df["values"] = df.apply(lambda x: x["values"][x['size']:], axis=1)
      print(df)
      

      输出:

         size           values
      0     2  [3, 4, 5, 6, 7]
      1     3              [4]
      2     5           [4, 3]
      

      【讨论】:

        【解决方案3】:

        在基础 Python 中使用 map,您可以这样做

        dat['values'] = pd.Series(map(lambda x, y : x[y:], dat['values'], dat['size']))
        

        返回

        dat
        Out[34]: 
                    values  size
        0  [3, 4, 5, 6, 7]     2
        1              [4]     3
        2           [4, 3]     5
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-02-10
          • 2017-11-20
          • 2021-07-20
          • 2013-08-12
          • 1970-01-01
          • 1970-01-01
          • 2019-04-22
          相关资源
          最近更新 更多