我有一个名为ref(first dataframe)的数据框,其中包含列c1,c2,c3和c4。
ref= pd.DataFrame([[1,3,.3,7],[0,4,.5,4.5],[2,5,.6,3]], columns=['c1','c2','c3','c4']) print(ref) c1 c2 c3 c4 0 1 3 0.3 7.0 1 0 4 0.5 4.5 2 2 5 0.6 3.0
我想创建一个新列,即c5(第二个数据帧),它具有列c1,c2,c3和c4中的所有值。
我试过concat,合并列,但我无法正常工作。
请让我知道您是否有解决方案?
您可以使用unstack
用于创建Series
从DataFrame
后concat
到原:
print (pd.concat([ref, ref.unstack().reset_index(drop=True).rename('c5')], axis=1)) c1 c2 c3 c4 c5 0 1.0 3.0 0.3 7.0 1.0 1 0.0 4.0 0.5 4.5 0.0 2 2.0 5.0 0.6 3.0 2.0 3 NaN NaN NaN NaN 3.0 4 NaN NaN NaN NaN 4.0 5 NaN NaN NaN NaN 5.0 6 NaN NaN NaN NaN 0.3 7 NaN NaN NaN NaN 0.5 8 NaN NaN NaN NaN 0.6 9 NaN NaN NaN NaN 7.0 10 NaN NaN NaN NaN 4.5 11 NaN NaN NaN NaN 3.0
创建替代的解决方案Series
是转换df
到numpy array
通过values
,然后重塑ravel
:
print (pd.concat([ref, pd.Series(ref.values.ravel('F'), name='c5')], axis=1)) c1 c2 c3 c4 c5 0 1.0 3.0 0.3 7.0 1.0 1 0.0 4.0 0.5 4.5 0.0 2 2.0 5.0 0.6 3.0 2.0 3 NaN NaN NaN NaN 3.0 4 NaN NaN NaN NaN 4.0 5 NaN NaN NaN NaN 5.0 6 NaN NaN NaN NaN 0.3 7 NaN NaN NaN NaN 0.5 8 NaN NaN NaN NaN 0.6 9 NaN NaN NaN NaN 7.0 10 NaN NaN NaN NaN 4.5 11 NaN NaN NaN NaN 3.0