繁体   English   中英

在 Pandas DataFrame 的单元格内为列表中的每个项目添加一个新列

[英]Add a new column for each item in a list inside a cell in a Pandas DataFrame

假设我有这张桌子

import pandas as pd

df_test = pd.DataFrame()
df_test = df_test.assign(A=[[1,2,3], [1,2], [], [1,2,3,4]])
df_test


+────────────+
| list       |
+────────────+
| [1,2,3]    |
| [1,2]      |
| []         |
| [1,2,3,4]  |
+────────────+

我想要做的是为行内列表中的每个项目添加一列。

我想要的输出看起来像这样

+────────────+───+───+───+───+
| list       |   |   |   |   |
+────────────+───+───+───+───+
| [1,2,3]    | 1 | 2 | 3 |   |
| [1,2]      | 1 | 2 |   |   |
| []         |   |   |   |   |
| [1,2,3,4]  | 1 | 2 | 3 | 4 |
+────────────+───+───+───+───+
out = df_test[['A']].join(df_test['A'].apply(pd.Series))

out

     A              0       1       2       3
0   [1, 2, 3]       1.0     2.0     3.0     NaN
1   [1, 2]          1.0     2.0     NaN     NaN
2   []              NaN     NaN     NaN     NaN
3   [1, 2, 3, 4]    1.0     2.0     3.0     4.0
output = df_test[['A']].join(pd.DataFrame(df_test.unstack().tolist()))

              A    0    1    2    3
0     [1, 2, 3]  1.0  2.0  3.0  NaN
1        [1, 2]  1.0  2.0  NaN  NaN
2            []  NaN  NaN  NaN  NaN
3  [1, 2, 3, 4]  1.0  2.0  3.0  4.0

还有另一种方式,我认为应该更快,因为它使用的values没有重塑或没有应用然后连接:

out = pd.concat([df_test, pd.DataFrame(df_test['A'].values.tolist())], axis=1)

print(out)

              A    0    1    2    3
0     [1, 2, 3]  1.0  2.0  3.0  NaN
1        [1, 2]  1.0  2.0  NaN  NaN
2            []  NaN  NaN  NaN  NaN
3  [1, 2, 3, 4]  1.0  2.0  3.0  4.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM