我想做的是基于最后一列(键)创建组,以便在第一个组中获得例如行1。对于第二组,我获得行1和2。在第三组中得到最后两行。
我尝试使用pandas groupby方法grouped = df1.groupby('Key')
来执行此操作,但正如预期的那样,它仅返回2个组。
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3','A4'],
...: 'B': ['B0', 'B1', 'B2', 'B3', 'B4'],
...: 'C': ['C0', 'C1', 'C2', 'C3', 'C4'],
...: 'D': ['D0', 'D1', 'D2', 'D3', 'D4'],
'Key': ['K0', 'K1', 'K1', 'K0', 'K0']},
...: index=[0, 1, 2, 3, 4])
df1
Out[89]:
A B C D Key
0 A0 B0 C0 D0 K0
1 A1 B1 C1 D1 K1
2 A2 B2 C2 D2 K1
3 A3 B3 C3 D3 K0
4 A4 B4 C4 D4 K0
答案 0 :(得分:3)
您可以使用 shift
和 cumsum
,然后使用 groupby
grouped = df.groupby((df.Key != df.Key.shift()).cumsum())
grouped.groups
{1: Int64Index([0], dtype='int64'),
2: Int64Index([1, 2], dtype='int64'),
3: Int64Index([3, 4], dtype='int64')}
显示为什么有效:
(df.Key != df.Key.shift()).cumsum()
0 1
1 2
2 2
3 3
4 3
Name: Key, dtype: int32
每次Key
更改时,即使以前已经看到过该值,该列的累加和也将增加1。这样,您就可以按此新系列进行分组,该系列仅对连续重复的键进行分组。