Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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 使用pandas groupby但保持其他列的顺序,然后在组内移位_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 使用pandas groupby但保持其他列的顺序,然后在组内移位

Python 使用pandas groupby但保持其他列的顺序,然后在组内移位,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,假设我有一个熊猫数据帧df,如下所示- a b 0 1 23 1 2 67 2 1 98 3 1 45 4 2 64 5 3 76 我想使用groupby,因此生成的数据帧如下- a b 0 1 23 1 1 98 2 1 45 3 2 67 4 2 64 5 3 76 我尝试了df.groupby(['a',b']).count().reset_index()但是它改变了

假设我有一个熊猫数据帧
df
,如下所示-

    a   b
0   1   23
1   2   67
2   1   98
3   1   45
4   2   64
5   3   76
我想使用
groupby
,因此生成的数据帧如下-

    a   b
0   1   23
1   1   98
2   1   45
3   2   67
4   2   64
5   3   76
我尝试了
df.groupby(['a',b']).count().reset_index()
但是它改变了
'b'
接下来,我如何在一个团队中转换?例如,我想按“a”分组,并将“b”移动1个位置。所以分组和移位的数据帧是这样的-

    a   b
0   1   NA
1   1   23
2   1   98
3   2   NA
4   2   67
5   3   NA

首先,您希望df在
a
上排序:

In [4501]: df = df.sort_values('a')

In [4502]: df
Out[4502]: 
   a   b
0  1  23
2  1  98
3  1  45
1  2  67
4  2  64
5  3  76
现在,您要将其按每组移动1:

In [4504]: df['b'] = df.groupby('a')['b'].shift()

In [4505]: df
Out[4505]: 
   a     b
0  1   NaN
2  1  23.0
3  1  98.0
1  2   NaN
4  2  67.0
5  3   NaN

您似乎有两个问题您的
分组
数据帧输出看起来像排序的数据帧。这就是您想要的吗?不。分组的数据框必须按列“b”在原始数据框中出现的顺序包含列。@Dani Mesejo,是的,实际上有两个问题。@PaulH当然,我根据您的评论更新了我的答案。