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 A@gmail.com
1 2 B B@gmail.com
2 3 C C@gmail.com
另一个想法是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 A@gmail.com 2 B B@gmail.com 3 C C@gmail.com
df = df.stack().reset_index(drop=True)
print (df)
Email_id ID Name
0 A@gmail.com 1 A
1 B@gmail.com 2 B
2 C@gmail.com 3 C
TA贡献1993条经验 获得超5个赞
如果您确实知道这样的数据结构是一致的,您可以按索引对数据进行切片,然后连接它们:
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)])
添加回答
举报