这就是我所拥有的:
df:
A B C D
0 foo 1 3 5 7
1 moo 2 4 6 8
2 poo 3 5 7 9
我想要的是什么:
df_Transposed:
foo moo poo
0 A 1 2 3
1 B 3 4 5
2 C 5 6 7
3 D 7 8 9
我试过了transpose()
,但我的钥匙成了否定的范围。列。我希望密钥成为['foo', 'moo', 'poo']
。我希望我的索引与df
中的索引保持一致。
不要假设方阵,这是一个索引帧。
答案 0 :(得分:2)
您可以进行转置,然后使用droplevel
删除额外的列级
result.columns = result.columns.droplevel(0)
并使用set_index
添加新的索引级别:
result = result.set_index([np.arange(len(result)), result.index])
例如,
import pandas as pd
index = pd.MultiIndex.from_tuples([(0, 'foo'), (1, 'moo'), (2, 'poo')])
df = pd.DataFrame({'A': [1, 2, 3],
'B': [3, 4, 5],
'C': [5, 6, 7],},
index=index)
result = df.T
result.columns = result.columns.droplevel(0)
result = result.set_index([np.arange(len(result)), result.index])
print(result)
打印
foo moo poo
0 A 1 2 3
1 B 3 4 5
2 C 5 6 7
答案 1 :(得分:1)
df.reset_index(0, drop=True).T.set_index([range(len(df.columns))], append=True).swaplevel(0, 1)
df1 = df.reset_index(0, drop=True).T
idx = pd.MultiIndex.from_tuples(
zip(range(len(df1)), df1.index.tolist())
)
df1 = df1.set_index(idx)
df1
答案 2 :(得分:1)
您可以采取类似于piRSquared的答案,但采用不同的方式更改索引。
df1 = df.reset_index.(0, drop=True).T
df1.index = pd.MultiIndex.from_tuples([(i,x) for i,x in enumerate(df1.index)])
这适用于非方形的数据帧以及方形的数据帧。
答案 3 :(得分:1)
这有点奏效,我找不到从multiIndex中删除标签([' level_0',' index'])的方法。
df3 = df.reset_index(0, drop=True).T.reset_index().reset_index()
df3 = df3.set_index(['level_0', 'index'])
df3
foo moo poo
level_0 index
0 A 1 2 3
1 B 3 4 5
2 C 5 6 7
3 D 7 8 9
df3.info()
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 4 entries, (0, A) to (3, D)
Data columns (total 3 columns):
foo 4 non-null int64
moo 4 non-null int64
poo 4 non-null int64
dtypes: int64(3)
memory usage: 128.0+ bytes
答案 4 :(得分:1)
我能够以另一种方式做到这一点。这是我的代码。转置后:
df.columns = df.iloc[0]
df = df.reset_index()
df = df.drop(df.index[0])
df = df.reset_index()
df =df.drop(["level_0","index"],axis = 1)