Python 如果有两个以上的唯一值,则过滤df-熊猫

Python 如果有两个以上的唯一值,则过滤df-熊猫,python,pandas,Python,Pandas,我有一个df,它包含不同时间点的值。我有两个单独的列,它们应该为每个时间点显示一组唯一的值。大多数情况下都会发生这种情况,但有时时间点包含多个唯一值。我希望用条件逻辑过滤这些 对于下面的df,在time中有唯一的时间点。我只想为每个时间点的Value和Object设置一组唯一值。如果在Value中出现两个唯一的项,我想删除X并保留Y,而不管对象中是什么。如果Object中有两个唯一的项,那么我想保留第一行。在本例中,值中的项目将相同 df = pd.DataFrame({

我有一个df,它包含不同时间点的值。我有两个单独的列,它们应该为每个时间点显示一组唯一的值。大多数情况下都会发生这种情况,但有时时间点包含多个唯一值。我希望用条件逻辑过滤这些

对于下面的df,在
time
中有唯一的时间点。我只想为每个时间点的
Value
Object
设置一组唯一值。如果在
Value
中出现两个唯一的项,我想删除
X
并保留
Y
,而不管
对象中是什么。如果
Object
中有两个唯一的项,那么我想保留第一行。在本例中,
值中的项目将相同

df = pd.DataFrame({   
        'Time' : ['2019-08-02 09:50:10.1','2019-08-02 09:50:10.1','2019-08-02 09:50:10.2','2019-08-02 09:50:10.2','2019-08-02 09:50:10.3','2019-08-02 09:50:10.3','2019-08-02 09:50:10.4','2019-08-02 09:50:10.4','2019-08-02 09:50:10.6','2019-08-02 09:50:10.6'],
        'Object' : ['A','A','B','B','C','A','C','B','B','B'],                 
        'Value' : ['X','X',np.nan,np.nan,'Y','X','Y','Y','Z','Z'],                  
        })
我最初考虑在每个时间点返回包含多个唯一项目集的行,这些行可用于过滤

unq_Object = df.groupby('Time').apply(lambda x: x['Object'].unique())
unq_Value = df.groupby('Time').apply(lambda x: x['Value'].unique())
但我不确定是否有更有效的方法

预期产出:

                    Time Object Value
0  2019-08-02 09:50:10.1      A     X
1  2019-08-02 09:50:10.1      A     X
2  2019-08-02 09:50:10.2      B   NaN
3  2019-08-02 09:50:10.2      B   NaN
4  2019-08-02 09:50:10.3      C     Y
5  2019-08-02 09:50:10.4      C     Y
6  2019-08-02 09:50:10.6      B     Z
7  2019-08-02 09:50:10.6      B     Z

更新使用
replicate

df[df.duplicated(keep=False)|df.index.isin(df.groupby('Time').head(1).index)]
Out[187]: 
                    Time Object Value
0  2019-08-02 09:50:10.1      A     X
1  2019-08-02 09:50:10.1      A     X
2  2019-08-02 09:50:10.2      B   NaN
3  2019-08-02 09:50:10.2      B   NaN
4  2019-08-02 09:50:10.3      C     Y
6  2019-08-02 09:50:10.4      C     Y
8  2019-08-02 09:50:10.6      B     Z
9  2019-08-02 09:50:10.6      B     Z
如果所有时间都有多个

我们能做到

df[df.Time.duplicated()|df.duplicated(keep=False)]

我已经包括了更多的信息谢谢@WeNYoBen,这对于
对象中的重复值非常有效。但是
值中的重复项可能不起作用。如果
Y
X
之前排序,则没有问题,但如果在
X
之后排序,则会将其删除。我对您的预期输出感到困惑。我正在打印您的数据帧,似乎正是这样。示例df有10行,我的输出有8行?无需告诉我;)