[英]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.