我有一个像这样的数据框,
df
col1 col2 col3
1 A P
2 B P
3 C P
4 D P
5 E Q
6 F Q
7 G Q
8 H P
9 I P
10 J P
11 K P
我想用下面的条件从上面创建一个新的数据框,如果col3值相同,只保留重复的col3值的第一行和最后一行。
所以最终的数据帧看起来是这样的,
df
col1 col2 col3
1 A P
4 D P
5 E Q
7 G Q
8 H P
11 K P
我可以使用for循环来实现这一点,并使用下一行进行迭代,但是使用它执行时间会更长。寻找一些熊猫捷径/蟒蛇方式来最有效地完成这项任务。
发布于 2020-05-18 22:37:41
让我们尝试使用shift
和cusmum
创建组,然后执行duplicated
s=df.col3.shift().ne(df.col3).cumsum()
sdf=df[~(s.duplicated() & s.iloc[::-1].duplicated())].copy()
sdf
Out[219]:
col1 col2 col3
0 1 A P
3 4 D P
4 5 E Q
6 7 G Q
7 8 H P
10 11 K P
发布于 2020-05-19 03:09:31
groupby的nth方法也适用,@Andy.L建议:
#get cumulative on col3
df['col4'] = df.col3.ne(df.col3.shift()).cumsum()
df.groupby('col4',sort=False).nth([0,-1])
col1 col2 col3
col4
1 1 A P
1 4 D P
2 5 E Q
2 7 G Q
3 8 H P
3 11 K P
https://stackoverflow.com/questions/61880051
复制相似问题