【发布时间】:2023-02-26 05:02:59
【问题描述】:
我有一个 pandas DataFrame,其中一列包含列表,例如:
>>> import pandas as pd
>>> d = {'A': [1, 2, 3], 'B': [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]}
>>> df = pd.DataFrame(data=d)
>>> df
A B
0 1 [0.1, 0.2, 0.3]
1 2 [0.4, 0.5, 0.6]
2 3 [0.7, 0.8, 0.9]
我可以将这些列表解压缩到单独的列
>>> df[['x','y','z']] = df.B.tolist()
>>> df
A B x y z
0 1 [0.1, 0.2, 0.3] 0.1 0.2 0.3
1 2 [0.4, 0.5, 0.6] 0.4 0.5 0.6
2 3 [0.7, 0.8, 0.9] 0.7 0.8 0.9
但想用链接兼容的命令来做到这一点。
我想过使用.assign,但在这里我需要明确定义每个变量,并且通过 lambdas 解包有点涉及。
>>> (df.assign(q=lambda df_: df_.B.apply(lambda x: x[0]),
... w=lambda df_: df_.B.apply(lambda x: x[1]),
... u=lambda df_: df_.B.apply(lambda x: x[2])))
A B q w u
0 1 [0.1, 0.2, 0.3] 0.1 0.2 0.3
1 2 [0.4, 0.5, 0.6] 0.4 0.5 0.6
2 3 [0.7, 0.8, 0.9] 0.7 0.8 0.9
有一个更好的方法吗?
【问题讨论】:
-
顺便说一句,你可以在没有
apply的情况下使用.assign(q=lambda d: d['B'].str[0])对列表进行切片;)
标签: python pandas chaining iterable-unpacking