重塑Pandas Dataframe切片列并将其添加为行

时间:2018-04-24 06:27:49

标签: python python-3.x pandas dataframe

我有一个名为'trdf'的pandas数据帧,其形状为[1行X 420列]。

      0                                                  1           2    \
0  B0742F7GT8  Stone & Beam Modern Tripod Floor Lamp, 61"H, W...  2018-04-22   

       3        4       5      6   7       8   9            ...            \
0  24-Apr-2018  100.00%  17.06%  0.00%   5  66.67%   8          ...             

  410  411 412       413 414 415    416      417 418                    419  
0  56  161  -8  -166.67%   0   1  0.00%  100.00%   8  Planned Replenishment  

我想从最后一列切割每20列,并将列值添加为新的行值。这是我的代码:

for i in range(420,20,-20):
    trdf.append(trdf.loc[:,i:i-20])
print(trdf)

但是,数据框在形状和值方面仍然相同。哪里出错?

1 个答案:

答案 0 :(得分:1)

我相信首先在列中创建MultiIndex然后unstack

df.columns = [df.columns % 20, df.columns // 20]
df = df.stack().reset_index(level=0, drop=True)

或者使用numpy解决方案reshape,但最后所有数据都是string s:

df = pd.DataFrame(df.values.reshape(20, 21))

如果要使用您的解决方案,请同时创建一行DataFrames和concat的列表:

L = []
for i in range(420,20,-20):
    #change order for selecting 
    df2 = df.loc[:,i-20:i]
    #for same columns
    df2.columns = range(20)
    L.append(df2)

df1 = pd.concat(L)

此外,如果需要预期的输出从最后一列连接到第一列:

df.columns = [df.columns % 20, 20-df.columns // 20]
df = df.stack().reset_index(level=0, drop=True)

df1 = pd.DataFrame(df.values.reshape(20, 21)[::-1])