簡體   English   中英

按組將列轉換為行

[英]Convert columns to rows by groups

我有一個這樣的數據框

Chennai
6200SqFT
10,000 Population
Mumbai
5000sqFT
17,000 Population

我想這樣轉換

Chennai    6200SqFT    10,000 Population
Mumbai     5000SqFT    17,000 Population

IIUC,您可以采用以下方法:

假設您的數據框如下所示:

print(df)
                   0
0            Chennai
1           6200SqFT
2  10,000 Population
3             Mumbai
4           5000sqFT
5  17,000 Population

np.reshape解決

output  = pd.DataFrame(df[0].to_numpy().reshape(-1,3))
#or output  = pd.DataFrame(df[0].values.reshape(-1,3))

輸出:

         0         1                  2
0  Chennai  6200SqFT  10,000 Population
1   Mumbai  5000sqFT  17,000 Population

如果您有不均勻的線條(不是 3 的倍數,請嘗試):

output = pd.concat([g.reset_index(drop=True) 
         for _,g in df.groupby(df.index//3)],axis=1).T.reset_index(drop=True)

試試下面的代碼,

df_new = pd.DataFrame(df.values.reshape(-1,3), columns=['town', 'area', 'population'])
df_new.show()

輸出

    town     area           population
0   Chennai 6200SqFT    10,000 Population
1   Mumbai  5000sqFT    17,000 Population

試試這個,因為有人在之前的評論中提到使用切片

>>> a,b,c = df[::3].values.reshape(-1), df[1::3].values.reshape(-1), df[2::3].values.reshape(-1)

>>> pd.DataFrame({'a':a,'b':b,'c':c}, index=range(len(a)))
         a         b                  c
0  Chennai  6200SqFT  10,000 Population
1   Mumbai  5000sqFT  17,000 Population

output = pd.concat([g.reset_index(drop=True) for _,g in df.groupby(df.index//3)],axis=1).T.reset_index(drop=True)

由 anky_91 發表

暫無
暫無

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

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