簡體   English   中英

通過將列附加到列來重塑 Pandas 數據框

[英]reshape Pandas dataframe by appending column to column

我確實有一個像 (df1) 的 Pandas df:

     0 1 2  3   4  5
   0 a b c  d   e  f
   1 1 4 7  10  13 16
   2 2 5 8  11  14 17
   3 3 6 9  12  15 18

我想生成一個像(df2)這樣的數據框:

   0  1  2 
0  a  b  c
1  1  4  7
2  2  5  7 
3  3  6  9
4  d  e  f 
5  10 13 16
6  11 14 17
7  12 15 18

關於給定 df 的附加信息:

  1. 給定 df 的形狀是未知的。 b = df1.shape() -> b = [n,m]
  2. df1 的寬度可以被 3 整除是一個給定的事實

我確實嘗試過stack、melt和wide_to_long。 通過使用堆棧,行的順序會丟失,行的行為應如示例 df2 所示。 我真的很感激任何幫助。

親切的問候漢斯

您可以使用DataFrame.append

a = df[df.columns[: len(df.columns) // 3 + 1]]
b = df[df.columns[len(df.columns) // 3 + 1 :]]
b.columns = a.columns

df_out = a.append(b).reset_index(drop=True)
print(df_out)

印刷:

    0   1   2
0   a   b   c
1   1   4   7
2   2   5   8
3   3   6   9
4   d   e   f
5  10  13  16
6  11  14  17
7  12  15  18

編輯:處理未知寬度:

dfs = []
for i in range(0, len(df.columns), 3):
    dfs.append(df[df.columns[i : i + 3]])
    dfs[-1].columns = df.columns[:3]

df_out = pd.concat(dfs)
print(df_out)

印刷:

    0   1   2
0   a   b   c
1   1   4   7
2   2   5   8
3   3   6   9
0   d   e   f
1  10  13  16
2  11  14  17
3  12  15  18
0   g   h   i
1  19  22  25
2  20  23  26
3  21  24  27

使用np.vstacknp.hsplit

>>> pd.DataFrame(np.vstack(np.hsplit(df, df.shape[1] / 3)))
    0   1   2
0   a   b   c
1   1   4   7
2   2   5   8
3   3   6   9
4   d   e   f
5  10  13  16
6  11  14  17
7  12  15  18

另一個例子:

>>> df
   0  1  2   3   4   5   6   7   8
0  a  b  c   d   e   f   g   h   i
1  1  4  7  10  13  16  19  22  25
2  2  5  8  11  14  17  20  23  26
3  3  6  9  12  15  18  21  24  27

>>> pd.DataFrame(np.vstack(np.hsplit(df, df.shape[1] / 3)))
     0   1   2
0    a   b   c
1    1   4   7
2    2   5   8
3    3   6   9
4    d   e   f
5   10  13  16
6   11  14  17
7   12  15  18
8    g   h   i
9   19  22  25
10  20  23  26
11  21  24  27

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM