我有以下格式的数据框
student marks
a [12,12,34]
b [34,35]
c [23,45,23]
我希望它转换为如下所示
student marks_1 marks_2 marks_3
a 12 12 34
b 34 35 Nan
c 23 45 23
如何实现这一目标?任何帮助,请
答案 0 :(得分:1)
使用由join
提取的列DataFrame
创建的pop
新marks
,转换为列表,并按自定义rename
使用lambda
列功能:
f = lambda x: 'marks_{}'.format(x + 1)
df = df.join(pd.DataFrame(df.pop('marks').values.tolist()).rename(columns=f))
print (df)
student marks_1 marks_2 marks_3
0 a 12 12 34.0
1 b 34 35 NaN
2 c 23 45 23.0
<强>详细强>:
print (pd.DataFrame(df.pop('marks').values.tolist()))
0 1 2
0 12 12 34.0
1 34 35 NaN
2 23 45 23.0
答案 1 :(得分:1)
尝试
dfr = pd.concat([df.student, df.marks.apply(lambda el: pd.Series(
el, index=['marks_{}'.format(i + 1) for i in range(len(el))]))], axis=1)
上面的代码从标记中的每个元素创建索引,然后将结果与学生列连接,
输出:
dfr
student marks 1 marks 2 marks 3
0 a 12.0 12.0 34.0
1 b 34.0 35.0 NaN
2 c 23.0 45.0 23.0