首页 > 解决方案 > 根据列值删除重复项

问题描述

我有一个看起来像这样的数据框:

timestamp            |  expectedValue   |   value    |  name
2020-04-01T00:00:00Z          0         |     231    |    a
2020-04-01T00:00:00Z          1         |     324    |    a
2020-04-01T00:00:00Z          0
2020-04-02T00:00:00Z          0
2020-04-02T00:00:00Z          1

我想删除具有 0 作为 expectedValue 的重复项并保留另一个。

最好的方法是什么?

问候

标签: pythonpandas

解决方案


您可以使用以下代码行获得您期望的内容:

df = df.iloc[df.expectedValue.ne(1).argsort(kind='mergesort')].drop_duplicates(['timestamp'])

它按时间戳列删除重复项,并仅返回值列不同于 0 的行。

玩具示例代码

下面的玩具示例代码按您的预期工作:

import pandas as pd
import numpy as np

df = pd.DataFrame([\
["2020-04-01T00:00:00Z",0,231,"a"],\
["2020-04-01T00:00:00Z",1,324,"a"],\
["2020-04-01T00:00:00Z",0,np.nan,np.nan],\
["2020-04-02T00:00:00Z",0,np.nan,np.nan],\
["2020-04-02T00:00:00Z",1,np.nan,np.nan]],\
columns=["timestamp","expectedValue","value","name"])

df = df.iloc[df.expectedValue.ne(1).argsort(kind='mergesort')].drop_duplicates(['timestamp'])

结果是:

In [40]: df
Out[40]:
              timestamp  expectedValue  value name
1  2020-04-01T00:00:00Z              1  324.0    a
4  2020-04-02T00:00:00Z              1    NaN  NaN

推荐阅读