我有以下数据框:
df = pd.DataFrame(
data=[
['X', '1'],[float('nan'),'2'],[float('nan'),'3'],
['Y', '4'],[float('nan'),'5'],[float('nan'),'6']])
0 1
0 X 1
1 NaN 2
2 NaN 3
3 Y 4
4 NaN 5
5 NaN 6
如何转换该数据框以将第二列平整为列表/数组,用于列0中的每个新值?
转换后,它应该像这样:
0 1
0 X [1,2,3]
3 Y [4,5,6]
保留索引并不重要。由于我是熊猫初学者,因此很难解决它而又不能通过for循环对其进行迭代。
答案 0 :(得分:2)
您可以在GroupBy
和apply
与list
之前使用pd.Series.ffill
:
df[0] = df[0].ffill()
res = df.groupby(0)[1].apply(list).reset_index()
print(res)
0 1
0 X [1, 2, 3]
1 Y [4, 5, 6]
通常,建议不要使用这样的数据结构,因为一系列列表会消除执行矢量化操作的能力。您的一系列列表的dtype为object
,其中可以包含指向任意类型的指针。