Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 - Fatal编程技术网

Python 反转数据帧中的行和列

Python 反转数据帧中的行和列,python,pandas,Python,Pandas,我正试图扭转这一局面,但我不知道如何扭转。 我从 >>> d = {'col1': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'], 'col2': [1, 2, 3, 4, 5, 6, 7, 7]} >>> df = pd.DataFrame(data=d) >>> df col1 col2 0 A 1 1 A 2 2 A 3 3 B 4 4

我正试图扭转这一局面,但我不知道如何扭转。 我从

>>> d = {'col1': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'], 'col2': [1, 2, 3, 4, 5, 6, 7, 7]}
>>> df = pd.DataFrame(data=d)
>>> df
  col1  col2
0    A     1
1    A     2
2    A     3
3    B     4
4    B     5
5    B     6
6    C     7
7    C     7
我想得到:

col1  new_1  new_2  new_3
0    A      1      2      3
1    B      4      5      6
2    C      7      7  empty
根据col1项的最大重复次数,存在新的_x列。 这似乎是一个相当标准的转置,但我找不到解决方案

抱歉,如果重复

Thx Sirius

在设置索引后使用
.cumcount()
.unstack()

cumcount()

代码的其余部分是获取目标数据帧,您也可以使用pivot和crosstab来实现这一点

df1 = df.set_index([df.groupby('col1').cumcount() + 1,
                    df['col1']]).drop('col1',1)\
                    .unstack(0)\
                    .droplevel(0,1)\
                    .add_prefix('new_')\
                    .fillna('empty')\
                    .reset_index()
或使用枢轴:

(df.assign(k=df.groupby("col1").cumcount()+1).pivot('col1','k','col2')
   .add_prefix("col_").reset_index())


它不是一行,但可能更简单/更容易理解

首先,聚合到一个列表列:

df_uzy=pd.DataFrame(df.groupby('col1').col2.agg(列表))

           col2
col1           
A     [1, 2, 3]
B     [4, 5, 6]
C        [7, 7]
  col1  new_0  new_1  new_2
0    A      1      2    3.0
1    B      4      5    6.0
2    C      7      7    NaN
然后,根据以下列表构建一个新的数据帧:

df2=(pd.DataFrame(df_u.col2.tolist(),index=df_u.index)。添加前缀('new_u'))
.reset_index())

           col2
col1           
A     [1, 2, 3]
B     [4, 5, 6]
C        [7, 7]
  col1  new_0  new_1  new_2
0    A      1      2    3.0
1    B      4      5    6.0
2    C      7      7    NaN
请注意:

  • 我将
    empty
    解释为空单元格,而不是
    'empty'
    字符串
  • NaN
    始终被视为浮点数,这就是熊猫将此列中的值强制转换为浮点数的原因
输出:

        0    1    2    3    4    5    6    7
  col1                                        
  A     1.0  2.0  3.0  0.0  0.0  0.0  0.0  0.0
  B     0.0  0.0  0.0  4.0  5.0  6.0  0.0  0.0
  C     0.0  0.0  0.0  0.0  0.0  0.0  7.0  7.0

empty
表示没有值,还是
的“empty”字符串?:-)@anky你可以随时编辑我的答案我的朋友:)