我想用python
和pandas
来做到这一点。
让我们假设以下内容:
x_position y_position
0 [4, 2, 6] [1, 2, 9]
1 [1, 7] [3, 5]
最后我要拥有以下内容:
x_position y_position new_0_0 new_0_1 new_1_0 new_1_1 new_2_0 new_2_1
0 [4, 2, 6] [1, 2, 9] 4 1 2 2 6 9
1 [1, 7] [3, 5] 1 3 7 5 Na Na
新列不必具有诸如new_0_0
之类的名称;可以是0_0
,甚至可以是任何东西。
第二,如果您的代码可以用于包含列表的更多列(例如,也带有z_position列。
最有效的方法是什么?
答案 0 :(得分:5)
将列表理解与DataFrame构造函数和concat
一起使用,按DataFrame.sort_index
的列按Multiindex
的第二级进行排序,最后对MultiIndex
进行展平:
print (df)
x_position y_position z_position
0 [4, 2, 6] [1, 2, 9] [4,8,9]
1 [1, 7] [3, 5] [1,3]
comp = [pd.DataFrame(df[x].tolist()) for x in df.columns]
df1 = pd.concat(comp, axis=1, keys=range(len(df.columns))).sort_index(axis=1, level=1)
df1.columns = [f'new_{b}_{a}' for a, b in df1.columns]
print (df1)
new_0_0 new_0_1 new_0_2 new_1_0 new_1_1 new_1_2 new_2_0 new_2_1 \
0 4 1 4 2 2 8 6.0 9.0
1 1 3 1 7 5 3 NaN NaN
new_2_2
0 9.0
1 NaN
print (df.join(df1))
x_position y_position z_position new_0_0 new_0_1 new_0_2 new_1_0 \
0 [4, 2, 6] [1, 2, 9] [4, 8, 9] 4 1 4 2
1 [1, 7] [3, 5] [1, 3] 1 3 1 7
new_1_1 new_1_2 new_2_0 new_2_1 new_2_2
0 2 8 6.0 9.0 9.0
1 5 3 NaN NaN NaN