[英]Keep first and last rows of repetitive columns values of a panda data frame
我有一個這樣的數據框,
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 循環並迭代下一行來執行此操作,但使用它執行時間會更長。 尋找一些 pandas 快捷方式/pythonic 方式來最有效地完成這項任務。
讓我們嘗試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
正如@Andy.L 建議的那樣, groupby 的第 n 個方法也可以工作:
#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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.