Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python重新创建数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python重新创建数据帧

Python重新创建数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,如下所示: 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

我有一个数据帧,如下所示:

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,keys=['yy','mm'])。 然而,如果我有更大的数据帧df,并且我将它分成许多部分(而不是仅仅3部分),那么我的解决方案是很麻烦的。 谢谢。

试试这个:

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]})


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)

可能需要使用几个步骤

df1=df.set_index([df.index % 2, df.index // 2]).unstack().sort_index(level=1, axis=1,ascending=True)#Split dataframe on every 2nd row
df1.columns = df1.columns.droplevel(1)#drop multi level index
m=df1.loc[:,['mm','yy']]#Isolate columns with yy, mm
s=m.loc[:,~m.columns.duplicated()]#drop duplicates in isolated above
t=df1.filter(regex='^col', axis=1)#filter rows with col

res=pd.concat([s,t], axis=1)#Concat into new frame res



   mm    yy  col1  col2  col1  col2     col1  col2
0  7.0  2020.0  0.22  10.0   0.6  40.0   0.6  90.0
1  7.0  2020.0  0.50  30.0   0.5  70.0   NaN   NaN

可能需要使用几个步骤

df1=df.set_index([df.index % 2, df.index // 2]).unstack().sort_index(level=1, axis=1,ascending=True)#Split dataframe on every 2nd row
df1.columns = df1.columns.droplevel(1)#drop multi level index
m=df1.loc[:,['mm','yy']]#Isolate columns with yy, mm
s=m.loc[:,~m.columns.duplicated()]#drop duplicates in isolated above
t=df1.filter(regex='^col', axis=1)#filter rows with col

res=pd.concat([s,t], axis=1)#Concat into new frame res



   mm    yy  col1  col2  col1  col2     col1  col2
0  7.0  2020.0  0.22  10.0   0.6  40.0   0.6  90.0
1  7.0  2020.0  0.50  30.0   0.5  70.0   NaN   NaN

我认为你的代码是正确的,但是你觉得有什么棘手的地方吗?我实际上在寻找一种更有效的方法,以防我的数据帧更大,我需要将它分成许多部分(而不是仅仅3部分)。你不需要将它们保存到单独的变量中,你可以直接将它们合并:
a=np.array\u split(df,3)
然后
pd.concat([i.reset_index(),用于a中的i],轴=1)
添加一个新列,以便通过旋转变换它如何
df['flg']=[1,1,2,2,3,3,…]'
之后更新列名如何?我认为你的代码是正确的,但你觉得有什么棘手的地方?我实际上在寻找一种更有效的方法,以防我的数据帧更大,我需要将其分成许多部分(而不是仅仅3部分),而不是将它们保存到单个变量中,您可以直接将它们合并:
a=np.array\u split(df,3)
然后
pd.concat([i.reset\u index()for i in a],axis=1)
添加一个新列,以便通过旋转对其进行转换如何
df['flg']=[1,1,2,2,3,3,…]'
之后更新列名如何?