4 回答

TA貢獻1804條經驗 獲得超8個贊
我們需要先調整列類型,然后wide_to_long
df1.columns=df1.columns.str.split('_').map(lambda x : '_'.join(x[::-1]))
yourdf=pd.wide_to_long(df1.reset_index(),
['aspect1','aspect2','aspect3'],
i ='index',
j = 'drop',
sep = '_',suffix='\w+').reset_index(drop=True)
Out[137]:
aspect1 aspect2 aspect3
0 a 1 [12,34]
1 b 2 [56,78]
2 c 3 [99,10]
3 a 1 [12,34]
4 b 2 [56,78]
5 c 3 [99,10]
6 a 1 [12,34]
7 b 2 [56,78]
8 c 3 [99,10]

TA貢獻1818條經驗 獲得超7個贊
如果你想堅持使用 pandas 操作,不想不斷更改數據類型并更喜歡列表理解。試試這個方法 -
lst = list(df1.columns)
n=3
new_cols = ['aspect_1', 'aspect_2', 'aspect_3']
#break the column list into groups of n = 3 in this case
chunks = [lst[i:i + n] for i in range(0, len(lst), n)]
#concatenate the list of dataframes over axis = 0after renaming columns of each
pd.concat([df1[i].set_axis(new_cols, axis=1) for i in chunks], axis=0, ignore_index=True)
aspect_1 aspect_2 aspect_3
0 a 1 [12,34]
1 b 2 [56,78]
2 c 3 [99,10]
3 a 1 [12,34]
4 b 2 [56,78]
5 c 3 [99,10]
6 a 1 [12,34]
7 b 2 [56,78]
8 c 3 [99,10]

TA貢獻1851條經驗 獲得超5個贊
獲取唯一的尾列名稱:
cols?=?df1.columns.str.split("_").str[-1].drop_duplicates()
在數據框上使用 numpy 的重塑,并創建一個新的數據框:
pd.DataFrame(np.reshape(df1.to_numpy(), df1.shape[::-1]), columns=cols)
aspect1 aspect2 aspect3
0? ?a? ?1? ?[12,34]
1? ?a? ?1? ?[12,34]
2? ?a? ?1? ?[12,34]
3? ?b? ?2? ?[56,78]
4? ?b? ?2? ?[56,78]
5? ?b? ?2? ?[56,78]
6? ?c? ?3? ?[99,10]
7? ?c? ?3? ?[99,10]
8? ?c? ?3? ?[99,10]
或者,我們可以結合使用numpy split和numpy vstack來獲得輸出:
column_count = df1.columns.str[-1].astype(int).max()
pd.DataFrame(np.vstack(np.split(df1.to_numpy(), column_count, axis=1)), columns=cols)
aspect1 aspect2 aspect3
0? ?a? ?1? ?[12,34]
1? ?b? ?2? ?[56,78]
2? ?c? ?3? ?[99,10]
3? ?a? ?1? ?[12,34]
4? ?b? ?2? ?[56,78]
5? ?c? ?3? ?[99,10]
6? ?a? ?1? ?[12,34]
7? ?b? ?2? ?[56,78]
8? ?c? ?3? ?[99,10]

TA貢獻1891條經驗 獲得超3個贊
這是一個相當簡單的方法:
df1.columns = [c[6:] for c in df1.columns]
pd.concat([df1.iloc[:, 0:3], df1.iloc[:, 3:6], df1.iloc[:, 6:9]], axis=0)
輸出是:
aspect1 aspect2 aspect3
0 a 1 [12,34]
1 b 2 [56,78]
2 c 3 [99,10]
0 a 1 [12,34]
1 b 2 [56,78]
...
添加回答
舉報