gpt4 book ai didi

python - 如果有两个以上唯一值,则过滤 df - pandas

转载 作者:行者123 更新时间:2023-12-01 06:58:05 24 4
gpt4 key购买 nike

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

对于下面的df,Time中有唯一的时间点。我只想为每个时间点的 ValueObject 提供一组唯一值。如果 Value 中出现两个唯一的项目,我想删除 X 并保留 Y,无论 Object 中有什么。如果 Object 中有两个唯一的项目,那么我想保留第一行。在这种情况下,Value 中的项目将相同。

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

最佳答案

更新使用重复

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)]

关于python - 如果有两个以上唯一值,则过滤 df - pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58721519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com