【问题标题】:selecting duplicates by condition python pandas按条件 python pandas 选择重复项
【发布时间】:2022-11-15 00:59:07
【问题描述】:

我有一个简单的数据框,我想在某些条件下将其分开。

Car Year Speed Cond
BMW 2001 150 X
BMW 2000 150
Audi 1997 200
Audi 2000 200
Audi 2012 200 X
Fiat 2020 180
Mazda 2022 183

我要做的是将副本复制到另一个数据框中,并在我的主数据框中只留下一行。

  • Car 列中重复的行我想分成一个单独的数据框,但我不需要cond 列中有 X 的行。
  • 在主数据框中,我想保留一行。我希望左行是在 cond 列中包含 X 的行

我有代码:

import pandas as pd
import numpy as np

cars = {'Car': {0: 'BMW', 1: 'BMW', 2: 'Audi', 3: 'Audi', 4: 'Audi', 5: 'Fiat', 6: 'Mazda'},
        'Year': {0: 2001, 1: 2000, 2: 1997, 3: 2000, 4: 2012, 5: 2020, 6: 2022},
        'Speed': {0: 150, 1: 150, 2: 200, 3: 200, 4: 200, 5: 180, 6: 183},
        'Cond': {0: 'X', 1: np.nan, 2: 'X', 3: np.nan, 4: np.nan, 5: np.nan, 6: np.nan}}

df = pd.DataFrame.from_dict(cars)
df_duplicates = df.loc[df.duplicated(subset=['Car'], keep = False)].loc[df['Cond']!='X']

我不知道如何让主数据框只剩下一行在cond 列中另外包含X 也许有一个命令可以根据上述规则删除并选择另一个数据框?

【问题讨论】:

  • 抱歉,逻辑不清楚,如果你有一个 X 你想把它保持为主,否则任何行?其余的转到另一个 DataFrame?您能否为两个 DataFrame 提供明确的输出?
  • 我在Car 列中有重复项,我希望将它们删除(并同时移动到另一个数据框)那些在cond 中没有 X 的重复项

标签: python pandas dataframe


【解决方案1】:

如果我正确理解所需的逻辑,您可以使用 groupby.idxmax 选择每组的第一个 X(如果有的话)(否则是组的第一行),以保留在主 DataFrame 中。其余的放在另一个 DataFrame (df2) 中。

# get indices of the row with X is any, else of the first one per group
keep = df['Cond'].eq('X').groupby(df['Car']).idxmax()

# drop selected rows
df2 = df.drop(keep)
# keep selected rows
df = df.loc[keep]

输出:

# updated df1
     Car  Year  Speed Cond
 0    BMW  2001    150    X
 2   Audi  1997    200    X
 5   Fiat  2020    180  NaN
 6  Mazda  2022    183  NaN

# df2
     Car  Year  Speed Cond
 1   BMW  2000    150  NaN
 3  Audi  2000    200  NaN
 4  Audi  2012    200  NaN

【讨论】:

  • 这是我所期望的,你能解释一下这里发生了什么吗?
  • 我不确定什么不清楚,请阅读 cmets 并让我知道任何具体问题
  • 结果很好,我想将重复项移动到单独的数据框,我只想留下那些有cond == X 的。如果我们有完全相同的两行,您的代码会起作用吗?也将其中一个移动到另一个df?我在 df_1 中只需要一行带键,如果我有两行奥迪和条件 X 怎么办
猜你喜欢
  • 1970-01-01
  • 2017-08-30
  • 2022-07-20
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 2021-03-11
相关资源
最近更新 更多