【问题标题】:Python drop duplicated pairs onlyPython 只删除重复的对
【发布时间】:2023-02-24 15:01:17
【问题描述】:

如果我有这样的数据框:

Time                        X     Y
2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.634508  200   10.1
2023-02-01T15:03:02.634508  200   10.1
2023-02-01T15:03:02.943522  200   10.1
2023-02-01T15:03:02.943522  200   10.1

我只想删除重复的 PAIRS。即第一对和第二对 .565333 时间戳实际上是唯一的,但是像 t[~t.duplicated()] 这样的操作将删除所有重复项,如下所示:

2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.634508  200   10.1
2023-02-01T15:03:02.943522  200   10.1

而我想要这个:

2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.565333  200   10.1
2023-02-01T15:03:02.634508  200   10.1
2023-02-01T15:03:02.943522  200   10.1

【问题讨论】:

  • 您是否反对手动遍历数据框来确定对?他们总是背靠背吗?

标签: python pandas dataframe duplicates data-cleaning


【解决方案1】:

您应该将重复的方法与子集参数指定用于识别重复项的列。在这种情况下,您只想根据 Time(X, Y) 值对来考虑重复项。也许它可以帮助你:

import pandas as pd

# Create example dataframe
df = pd.DataFrame({
    'Time': ['2023-02-01T15:03:02.565333', '2023-02-01T15:03:02.565333',
             '2023-02-01T15:03:02.565333', '2023-02-01T15:03:02.565333',
             '2023-02-01T15:03:02.634508', '2023-02-01T15:03:02.634508',
             '2023-02-01T15:03:02.943522', '2023-02-01T15:03:02.943522'],
    'X': [200, 200, 200, 200, 200, 200, 200, 200],
    'Y': [10.1, 10.1, 10.1, 10.1, 10.1, 10.1, 10.1, 10.1]
})

# Identify duplicates based on Time and (X,Y) pairs
duplicates = df.duplicated(subset=['Time', 'X', 'Y'])

# Invert boolean mask to select non-duplicates
non_duplicates = ~duplicates

# Print non-duplicates
print(df[non_duplicates])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2022-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多