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当然,我根据您的评论更新了我的答案。