首页 > 解决方案 > Python 重新创建数据框

问题描述

我有一个数据框如下:

df =
    yy  mm  col1  col2
   2020   7  0.22  10
   2020   7  0.50  30
   2020   7  0.60  40
   2020   7  0.50  70
   2020   7  0.60  90

我想将数据帧分成 3 部分并将其转置,使其结果为:

     yy    mm   col1    col2  col1   col2   col1   col2
     2020   7   0.22     10   0.60   40    0.60    90
     2020   7   0.50     30   0.50   70     NaN    NaN
  

到目前为止,我所做的是:

a = np.array_split(df,3)

a =
[    yy  mm  col1  col2
   2020   7  0.22  10
   2020   7  0.50  30,
     yy  mm  col1  col2
   2020   7  0.60  40,
   2020   7  0.50  70
     yy  mm  col1  col2
   2020   7  0.60  90]

后来我将 a 中列表的每个元素转换为数据框: a0 = a[0], a1 = a[1] 和 a2=a[2] 然后再做 pandas.concat([a0,a1,a2], axis = 1,键= ['yy','mm'])。但是,如果我有更大的数据框 df 并将其拆分为许多部分(而不仅仅是 3 个),我的解决方案会很麻烦。谢谢你。

标签: pythonpandasdataframe

解决方案


尝试这个:

df=pd.DataFrame({'yy':[2020]*5,'mm':[7]*5,'col1':[0.22,0.5,0.6,0.5,0.6],'col2':[10,30,40,70,90]})


length=2
lis=[]
i=0


while i<(len(df)/length)+length:
    lis.append(df.iloc[i:i+length,:].reset_index(drop=True))
    i+=length

final=pd.concat(lis,axis=1)

唯一的缺点是前两列也重复了。需要找到一种解决方法。

或者您可以:

df=pd.DataFrame({'yy':[2020]*5,'mm':[7]*5,'col1':[0.22,0.5,0.6,0.5,0.6],'col2':[10,30,40,70,90]})

a=np.array_split(df,len(df)/length)
pd.concat([i.reset_index(drop=True) for i in a],axis=1)

推荐阅读