python - reshape Pandas Dataframe 切片列并将它们添加为行

标签 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)

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

最佳答案

我相信首先在列中创建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/

相关文章:

python - 如何将 '<Return>' 绑定(bind)到 tkinter 中的焦点(选项卡式)按钮?

python - 函数在应该返回 True 时返回 false。编码问题?

python - 如何将 df 保存到多个位置的两个 Excel 文件中?

python - 在 Pandas DataFrame 中将文本(包含名称和值)列拆分为多列

python - 具有初始值的 Pandas cumsum

python sql间隔

django - NoReverseMatch 在/accounts/password_reset/

python - 寻求帮助,今天刚开始接触Python。 (3.0)

python - 如何调整行或列中的具体数据?

python - 如何在 Python 的 argparse 模块中收集两个选项,每个选项都有多个参数?