python-3.x - 在 Pandas 中将多列合并为一列

标签 python-3.x pandas stack concat

我有一个名为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,合并列,但我无法正常工作。

请让我知道您是否有解决方案?

pic

最佳答案

您可以使用 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

关于python-3.x - 在 Pandas 中将多列合并为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41627678/

相关文章:

datetime - 将 Pandas DataFrame 和 xaxis 绘制为 Timestamp 生成空图

c - 使用金丝雀值的堆栈损坏检测

c++ - 在 Stack 上声明大数组

memory - 如何确定最大堆栈使用量?

python - 更新 PyQT 标签

python - 在Python中将一个循环包装在另一个循环中?

python - 如何在Python中按字符数对列表进行排序?

python - 在DataFrame中平衡操作数据

python - 如何从 itertuples 中删除 "Pandas"对象名称?

python - 与 Pandas 的加权相关系数