Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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 重塑dataframe:从列到行_Python_Pandas_Dataframe_Reshape - Fatal编程技术网

Python 重塑dataframe:从列到行

Python 重塑dataframe:从列到行,python,pandas,dataframe,reshape,Python,Pandas,Dataframe,Reshape,我有一个给定[n,m]的数据帧df_,我想在每3行将列值更改为行值 import pandas as pd df_test1 = pd.DataFrame({'A1': np.arange(1,4), 'B1': np.arange(10, 13), 'C1': np.arange(20, 23)}) df_test2 = pd.DataFrame({'A1': np.arange(11,14), 'B1': np.arange(100, 103), 'C1': np.arange(200, 2

我有一个给定[n,m]的数据帧df_,我想在每3行将列值更改为行值

import pandas as pd
df_test1 = pd.DataFrame({'A1': np.arange(1,4), 'B1': np.arange(10, 13), 'C1': np.arange(20, 23)})
df_test2 = pd.DataFrame({'A1': np.arange(11,14), 'B1': np.arange(100, 103), 'C1': np.arange(200, 203)})  
df_given = pd.concat((df_test1, df_test2), axis =0)

df_desired = pd.DataFrame({'A': [1,10,20,11, 100, 200], 'B':[2,11, 21,12, 101, 201], 'C':[3,12,22,13, 102, 202]})
df_desired.head(10)

df_given.head(10)
IIUC

IIUC


pd.concat
GroupBy
一起使用:

df = df.reset_index(drop=True)

res = pd.concat((pd.DataFrame(df_slice.T.values, columns=df.columns.str[0]) \
                for _, df_slice in df.groupby(df.index // 3)), ignore_index=True)

print(res)

     A    B    C
0    1    2    3
1   10   11   12
2   20   21   22
3   11   12   13
4  100  101  102
5  200  201  202
解释

  • df.reset_index(drop=True)
    将数据帧索引重置为常规索引,即
    0,1,2,…,n
  • df.groupby(df.index//3)
    将数据帧分为3行。我们在生成器中迭代这个
    GroupBy
    对象
  • df_slice.T.values
    将构成切片的3行转置,并转换为NumPy数组。我们将其馈送到
    pd.DataFrame
    以从NumPy数组构造数据帧
  • pd.concat
    获取一组数据帧,并将它们组合成一个数据帧

使用
pd.concat
GroupBy

df = df.reset_index(drop=True)

res = pd.concat((pd.DataFrame(df_slice.T.values, columns=df.columns.str[0]) \
                for _, df_slice in df.groupby(df.index // 3)), ignore_index=True)

print(res)

     A    B    C
0    1    2    3
1   10   11   12
2   20   21   22
3   11   12   13
4  100  101  102
5  200  201  202
解释

  • df.reset_index(drop=True)
    将数据帧索引重置为常规索引,即
    0,1,2,…,n
  • df.groupby(df.index//3)
    将数据帧分为3行。我们在生成器中迭代这个
    GroupBy
    对象
  • df_slice.T.values
    将构成切片的3行转置,并转换为NumPy数组。我们将其馈送到
    pd.DataFrame
    以从NumPy数组构造数据帧
  • pd.concat
    获取一组数据帧,并将它们组合成一个数据帧

使用
groupby
stack
unstack

df1 = df_given.assign(g=df_given.groupby(level=0).cumcount()).set_index('g',append=True)

df1 = df1.stack().unstack(0).reset_index(drop=True)

df1.columns = df_given.columns

print (df1)


   A1   B1  C1
0   1   2   3
1   10  11  12
2   20  21  22
3   11  12  13
4   100 101 102
5   200 201 202

使用
groupby
stack
unstack

df1 = df_given.assign(g=df_given.groupby(level=0).cumcount()).set_index('g',append=True)

df1 = df1.stack().unstack(0).reset_index(drop=True)

df1.columns = df_given.columns

print (df1)


   A1   B1  C1
0   1   2   3
1   10  11  12
2   20  21  22
3   11  12  13
4   100 101 102
5   200 201 202


请粘贴的输入和输出的代码格式,而不是图像。我张贴了整个代码从一开始。我应该删除图片吗?代码很好,用正确的格式替换图片。好的,我不明白你的确切意思。我将不得不检查常见问题,因为我不知道什么是正确的图像格式。请粘贴的输入和输出的代码格式,而不是图像。我张贴了整个代码从一开始。我应该删除图片吗?代码很好,用正确的格式替换图片。好的,我不明白你的确切意思。我将不得不检查常见问题,因为我不知道什么是正确的图像格式。似乎没有更好的方法:-(@Silvia,当然,添加了一个解释。似乎没有更好的方法:-(@Silvia,当然,添加了一个解释。我是熊猫0.23.0,不幸的是,这对我不起作用。df被转换,但我仍然得到了一个(3,5)自卫队shape@Silvia这是工作,您只是忘记了将其赋回df=pd.concat([x代表uu,x在df_给定的.groupby((df_给定的.index==0.cumsum()),axis=1).你说得很对。我错了。对不起,我已经接受了另一个答案,我只能给你a+。我是熊猫0.23.0,不幸的是这对我不起作用。df被转换了,但我仍然得到一个(3,5)sdfshape@Silvia这是工作,您只是忘记了将其分配回df=pd.concat([x代表uuu,x代表df_u给定的.groupby((df_given.index==0.cumsum())],axis=1)你说得很对。我错了。对不起,我已经接受了另一个答案,我只能给你一个+。