我有一个名为“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)
但是,数据框的形状和值仍然相同。错误在哪里?
最佳答案
我相信首先在列中创建MultiIndex
,然后unstack
:
df.columns = [df.columns % 20, df.columns // 20]
df = df.stack().reset_index(level=0, drop=True)
或者使用带有reshape
的numpy解决方案,但最终所有数据都是string
:
df = pd.DataFrame(df.values.reshape(20, 21))
<小时/>
如果想使用您的解决方案,请创建一行 DataFrame 和 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])
关于python - reshape Pandas Dataframe 切片列并将它们添加为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49994780/