需求
pandas df 的某一列是列表的情况下,进行的相关操作
示例
>>> import pandas as pd
>>> df = pd.DataFrame({"A":[1, 2], "B":[["a", "b"], ["c", "d"]]}
>>> df
A B
0 1 [a, b]
1 2 [c, d]
展开:根据列表展开为多行
>>> df.explode("B")
A B
0 1 a
0 1 b
1 2 c
1 2 d
筛选:将列表中含某个值的行,都筛选出来
>>> df[df.B.apply(lambda x:"b" in x)]
A B
0 1 [a, b]
或者
>>> df[df["B"].apply(lambda x:"b" in x)]
A B
0 1 [a, b]
如果要判断是否含多个值的话
>>> df[df["B"].apply(lambda x:"b" in x or "c" in x)]
A B
0 1 [a, b]
1 2 [c, d]
可以把 lambda
后面的部分抽取成函数
>>> lt = ["b","c"]
>>> def find(lt_a, lt_b):
...: for x in lt_a:
...: if x in lt_b:
...: return True
...: return False
>>> df[df["B"].apply(lambda x:find(lt,x))]
A B
0 1 [a, b]
1 2 [c, d]
拼接:将列表拼接成字符串
>>> df.B = df.B.map(lambda x: ','.join(x))
>>> df
A B
0 1 a,b
1 2 c,d
或者
>>> df["B"] = df["B"].map(lambda x: ','.join(x))
>>> df
A B
0 1 a,b
1 2 c,d
取并集:将该列下的所有列表的值进行汇总
>>> list(set(sum(df["B"].tolist(), [])))
['b', 'a', 'c', 'd']