【问题标题】:Remove identical row from the data frame-Pandas从数据框-Pandas 中删除相同的行
【发布时间】:2021-06-08 07:23:11
【问题描述】:

我正在尝试删除两个数据帧之间匹配的相同行。但是,我在同一数据框中尝试相同行的任何方法也会被丢弃。但我想保留来自同一数据帧的相同行,并删除仅与其他数据帧匹配的行。

Dataframe 1:

 ID             PID         PDate      Amount
AAAAAA          NN11        20210525    386
BBBBBB          A12         20210525    3300
BBBBBB          A12         20210525    3300
CCCCCC          B11         20210625    1000

Dataframe 2:

 ID             PID         PDate      Amount
AAAAAA          NN11        20210525    386



Expected output:
 ID             PID         PDate      Amount
BBBBBB          A12         20210525    3300
BBBBBB          A12         20210525    3300
CCCCCC          B11         20210625    1000

我尝试连接和删除重复项、合并、重置索引。所有这些都从 ID BBBBBB 中删除,因为具有此 ID 的行是相同的。我想留住他们。

谁能帮我解决这个问题?

【问题讨论】:

  • 您可以找到这些数据帧与您要比较的数据帧的交集的索引,然后删除它们。

标签: python sql pandas


【解决方案1】:

试试isin

df1[~df1.isin(df2).all(1)]

输出

    ID      PID PDate       Amount
1   BBBBBB  A12 20210525    3300
2   BBBBBB  A12 20210525    3300
3   CCCCCC  B11 20210625    1000

【讨论】:

  • 更优雅的解决方案
  • 这个解决方案对我不起作用 :-(。非常感谢您的回复
【解决方案2】:

通过键的联合合并您的两个数据框。使用indicator=True 参数保存每一行的来源信息。如果值为both,则删除该行。

>>> pd.merge(df1, df2, how="outer", indicator=True) \
      .query("_merge != 'both'") \
      .drop(columns="_merge")

       ID  PID     PDate  Amount
1  BBBBBB  A12  20210525    3300
2  BBBBBB  A12  20210525    3300
3  CCCCCC  B11  20210625    1000

【讨论】:

  • 这对我有用。我正在尝试左外连接,外连接但没有使用查询。非常感谢
猜你喜欢
  • 2017-11-27
  • 2022-12-06
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
相关资源
最近更新 更多