我正在努力让我的 Dataframe 转置,不是简单的转置,但我想限制列数的行数在索引slices
,为了很好地解释我的问题,我给予你我的 Dataframe 在这里:
df=pd.DataFrame({
'n' : [0,1,2, 0,1,2, 0,1,2],
'col1' : ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'col2' : [9.6,10.4, 11.2, 3.3, 6, 4, 1.94, 15.44, 6.17]
})
其显示如下:
n col1 col2
0 0 A 9.60
1 1 A 10.40
2 2 A 11.20
3 0 B 3.30
4 1 B 6.00
5 2 B 4.00
6 0 C 1.94
7 1 C 15.44
8 2 C 6.17
从该 Dataframe 中,我希望获得以下new_df
:
0 1 2
col1 A A A
col2 9.6 10.4 11.2
col1 B B B
col2 3.3 6.0 4.0
col1 C C C
col2 1.94 15.44 6.17
目前为止我尝试的是:
new_df = df.values.reshape(3, 9)
new_w = [x.reshape(3,3).T for x in new_df]
df_1 = pd.DataFrame(new_w[0])
df_1.index = ['n', 'col1', 'col2']
df_2 = pd.DataFrame(new_w[1])
df_2.index = ['n', 'col1', 'col2']
df_3 = pd.DataFrame(new_w[2])
df_3.index = ['n', 'col1', 'col2']
new_df = df_1.append(df_2)
new_df = new_df.append(df_3)
new_df[new_df.index!='n']
我尝试的代码工作,但它看起来很长,我想要另一个较短的解决方案。
如果您能提供任何帮助,我们将不胜感激,谢谢。
3条答案
按热度按时间93ze6v8z1#
用
factorize
标识“col1”中的唯一值,然后用melt
合并两列,再用pivot
标识:或者使用
groupby.cumcount
:输出:
sg24os4d2#
在下面的方法中,我提取了3个 Dataframe ,以便稍后将它们连接起来。我必须做一些操作才能使其成为正确的格式:
列表中包含3个 Dataframe 后,可以使用
pd.concat
将它们连接起来代码:
输出:
oknwwptz3#
其逻辑是:
输出: