我有一个名为'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)
但是,数据框在形状和值方面仍然相同。哪里出错?
答案 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])