2 回答

TA貢獻1833條經驗 獲得超4個贊
您只能選擇一列,但由于重復的列名稱被選擇,因此選擇了具有相同標簽的所有列,然后轉換為1dnumpy 數組并傳遞給DataFrame構造函數:
print (df['ID'])
ID ID ID
0 1 2 3
df = pd.DataFrame({'ID': df['ID'].to_numpy().ravel(),
'Name': df['Name'].to_numpy().ravel(),
'Email_id': df['Email_id'].to_numpy().ravel()})
print (df)
ID Name Email_id
0 1 A [email protected]
1 2 B [email protected]
2 3 C [email protected]
另一個想法是MultiIndex在列中創建GroupBy.cumcount并通過以下方式重塑DataFrame.stack:
s = df.columns.to_series()
df.columns = [s, s.groupby(s).cumcount()]
print (df)
ID Name Email_id ID Name Email_id ID Name Email_id
0 0 0 1 1 1 2 2 2
0 1 A [email protected] 2 B [email protected] 3 C [email protected]
df = df.stack().reset_index(drop=True)
print (df)
Email_id ID Name
0 [email protected] 1 A
1 [email protected] 2 B
2 [email protected] 3 C

TA貢獻1993條經驗 獲得超6個贊
如果您確實知道這樣的數據結構是一致的,您可以按索引對數據進行切片,然后連接它們:
pd.concat([df.iloc[:, i:i+3] for i in range(0, df.shape[1], 3)])
要確保獲取列 ID:
import numpy as np
# Get the target indexes
idx = np.arange(df.shape[1])[df.columns=='ID']
idx = np.append(idx, df.shape[1])
# Slice and concatenate data
pd.concat([df.iloc[:, idx[i]:idx[i+1]] for i in range(len(idx)-1)])
添加回答
舉報