gpt4 book ai didi

Pandas:通过将列的值与不同行中同一列的另一个值进行比较来过滤行

转载 作者:行者123 更新时间:2023-12-04 10:37:56 25 4
gpt4 key购买 nike

我已经搜索了这个,我认为我没有找到任何适用的东西。但是我是 Pandas 的新手,所以我可能错过了一些东西 - 在这种情况下道歉。

假设我有一个数据框 df,其内容如下:

Column1       Column2
A Apple
B Apple
A Pear
A Orange
B Orange
A Pear

我想过滤数据框以仅显示以下行:

-Column2 的值至少匹配 1 个其他 Column2 值
- 对于这 2 个匹配的行,至少有 1 个 Column1 的值不同。

上述df的预期结果:
Column1       Column2 
A Apple
B Apple
A Orange
B Orange

我已尝试为此使用 .loc() 方法,但我找不到合适的过滤器/过滤器集。 (我也尝试使用 'for i in df' 循环,但这只是给出了一个错误)。

在这些情况下,我通常会发布一些示例代码,但我认为到目前为止我的任何方法都没有多大意义。

任何帮助将不胜感激 - 谢谢。

最佳答案

使用 GroupBy.transform nunqiue :

df_filtered = df[df.groupby('Column2')['Column1'].transform('nunique').gt(1)]
print(df_filtered)

我们也可以使用 pd.crosstab :
df[df['Column2'].map(pd.crosstab(df['Column1'],df['Column2']).gt(0).sum().gt(1))]
#df[df['Column2'].map(pd.crosstab(df['Column1'],df['Column2']).where(lambda x: x>0).count().gt(1))]

我们也可以使用 groupby.filter 一般来说,这比较慢
df.groupby('Column2').filter(lambda x: x.Column1.nunique()>1)

输出
  Column1 Column2
0 A Apple
1 B Apple
3 A Orange
4 B Orange

最好的解决方案是第一个 groupby.transform

关于Pandas:通过将列的值与不同行中同一列的另一个值进行比较来过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60076239/

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