首页 > 解决方案 > 在 pandas 数据框中操作列表的有效方法

问题描述

我有一个如下开头的 DataFrame:

第 1 列 第 2 列
0 Berlin ['Hamburg', 'Munich', 'Berlin', 'Stuttgart']
1 Tokyo ['Tokyo', 'Osaka', 'Kyoto', 'Sapporo']
2 Los Angeles ['New York', 'Chicago', 'Boston', 'Los Angeles']
3 London ['Birmingham', 'London', 'Glasgow', 'Liverpool']

我想从 Column2 列表中删除 Column1 中存在的城市,这样 DataFrame 就会变成这样:

第 1 列 第 2 列
0 Berlin ['Hamburg', 'Munich', 'Stuttgart']
1 Tokyo ['Osaka', 'Kyoto', 'Sapporo']
2 Los Angeles ['New York', 'Chicago', 'Boston']
3 London ['Birmingham', 'Glasgow', 'Liverpool']

由于逐行循环违反数据帧逻辑,解决这个问题的最佳方法是什么?

标签: pythonpandasdataframe

解决方案


尝试explodequery并且gropuby

(df.explode('Column2')
   .query('Column1 != Column2')
   .groupby(level=0)
   .agg({'Column1': 'first',
         'Column2': list
       })
)

或者直接apply

df['Column2'] = df.apply(lambda row: [x for x in row['Column2'] if x!=x['Column1']], 
                         axis=1)

推荐阅读