寻找有关如何解决以下问题的想法:
我有一个数据框,其中我的一列包含如下元组列表:
mydf = pd.DataFrame({
'Field1' : ['A','B','C'],
'Field2' : ['1','2','3'],
'WeirdField' :[
[ ('xxx', 'F1'), ('yyy','F2') ],
[ ('asd', 'F3'), ('bla','F4') ],
[ ('123', 'F2'), ('www','F5') ]
]
})
我希望元组第二个位置上的每个元素成为数据框上的一列,对应值在第一个位置上。 对于上面的数据框,这是我所期望的:
列表可以有多个元素(不只是示例中的 2 个),并且元素的数量可以随行变化。
谁能建议如何轻松实现这一目标?
谢谢
最佳答案
首先,我展平了 mydf['WeirdField']
列,这样我们就可以只看到值和列名,而不必担心包含它们的列表。接下来,您可以使用 itertools.groupby
获取每个“F”列的所有相应值和索引。
import itertools
# Must first sort the list by F column, or groupby won't work
flatter = sorted([list(x) + [idx] for idx, y in enumerate(mydf['WeirdField'])
for x in y], key = lambda x: x[1])
# Find all of the values that will eventually go in each F column
for key, group in itertools.groupby(flatter, lambda x: x[1]):
list_of_vals = [(val, idx) for val, _, idx in group]
# Add each value at the appropriate index and F column
for val, idx in list_of_vals:
mydf.loc[idx, key] = val
产生这个:
In [84]: mydf
Out[84]:
Field1 Field2 WeirdField F1 F2 F3 F4 F5
0 A 1 [(xxx, F1), (yyy, F2)] xxx yyy NaN NaN NaN
1 B 2 [(asd, F3), (bla, F4)] NaN NaN asd bla NaN
2 C 3 [(123, F2), (www, F5)] NaN 123 NaN NaN www
关于python - 数据框的元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42540558/