Python 如何根据另一行对行排序?
我正在尝试将一个公式从excel转换为pandas 数据帧如下所示:Python 如何根据另一行对行排序?,python,excel,pandas,dataframe,sequence,Python,Excel,Pandas,Dataframe,Sequence,我正在尝试将一个公式从excel转换为pandas 数据帧如下所示: Column A Column B H H H J J J J K K 我希望在A列中的值保持不变的情况下,将B列填充为增量。在上述示例中,这将是: Column A Column B H 1 H 2 H 3 J 1 J 2 J 3 J
Column A Column B
H
H
H
J
J
J
J
K
K
我希望在A列中的值保持不变的情况下,将B列填充为增量。在上述示例中,这将是:
Column A Column B
H 1
H 2
H 3
J 1
J 2
J 3
J 4
K 1
K 2
在excel中,公式为=IFA2A1,1,B1+1
如何在熊猫中应用此公式?可以使用以下矢量化方法: 代码: 输出: 说明: 首先,我们使用将列A与移位1的列A进行比较。这将产生:
>>> df['A'] != df['A'].shift(1)
0 True
1 False
2 False
3 True
4 False
5 False
6 False
7 True
8 False
Name: A, dtype: bool
接下来,我们使用返回该列的累积和。这给了我们:
>>> (df['A'] != df['A'].shift(1)).cumsum()
0 1
1 1
2 1
3 2
4 2
5 2
6 2
7 3
8 3
Name: A, dtype: int32
现在,我们可以像往常一样按升序枚举每个项,添加1以从1开始索引。请注意,我们不能只使用
df.groupby('A').cumcount()
因为,例如,如果我们有:
>>> df
A
0 H
1 H
2 H
3 J
4 J
5 J
6 J
7 K
8 K
9 H
这将使我们:
>>> df.groupby('A').cumcount() + 1
0 1
1 2
2 3
3 1
4 2
5 3
6 4
7 1
8 2
9 4
dtype: int64
请注意,最后一行是4,而不是预期的1
>>> df
A
0 H
1 H
2 H
3 J
4 J
5 J
6 J
7 K
8 K
9 H
>>> df.groupby('A').cumcount() + 1
0 1
1 2
2 3
3 1
4 2
5 3
6 4
7 1
8 2
9 4
dtype: int64