簡體   English   中英

Python Pandas在重復系列中首次下降

[英]Python Pandas Dropping First in Series of Duplicates

在一系列重復中刪除唯一第一個的Pythonic方法是什么?

我有一個數據幀:

Group    Value
  a        0
  a        1
  a        2
  b        6
  b        7
  b        8

我想要以下結果:

Group    Value
  a        1
  a        2
  b        7
  b        8

drop_duplicates 保留第一個或最后一個項目,具體取決於您如何設置它。 我希望在有重復的情況下放棄第一次出現並保留其余部分。

使用duplicated()創建一個布爾掩碼並基於它進行過濾:

df[df.Group.duplicated()]

#Group  Value
#1   a      1
#2   a      2
#4   b      7
#5   b      8

duplicated默認口罩重復,除了第一次出現是真的:

df.Group.duplicated()

#0    False
#1     True
#2     True
#3    False
#4     True
#5     True
#Name: Group, dtype: bool

要保持每組邊緣的一行(不再那么高效):

df[df.Group.duplicated() | df.Group.groupby(df.Group).transform('count').eq(1)]

# Group Value
#1    a     1
#2    a     2
#4    b     7
#5    b     8

要么:

df[df.Group.groupby(df.Group).transform(lambda x: (x.size == 1) | x.duplicated())]
# Group  Value
#1    a      1
#2    a      2
#4    b      7
#5    b      8

如果它是唯一的行,你想保留它

df.groupby('Group').Value.apply(lambda x : x.iloc[1:] if len(x)>1 else x).reset_index('Group')
Out[144]: 
  Group  Value
1     a      1
2     a      2
4     b      7
5     b      8
6     c     11

數據輸入

df
Out[138]: 
  Group  Value
0     a      0
1     a      1
2     a      2
3     b      6
4     b      7
5     b      8
6     c     11

這不是很好,但它應該工作

F = []
for names, frames in df.groupby('Group'):

    F.append(frames.sort_values('value').iloc[1:,:])

new_df = pd.concat(F)

找到第一行的索引,並刪除它drop 感謝Wen在答案中的通知,我們應該保留沒有重復項的行,並且我從他/她選擇具有重復項的組的方法中學習。

grouped = df.reset_index().groupby("Group")["index", "Value"]
first_rows = grouped.apply(lambda x: x.iloc[0] if len(x) > 1 else None).dropna()
index_first_rows = first_rows["index"]
df.drop(index_first_rows, axis="index")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM