首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定Pandas数据框行是否具有多个特定值

确定Pandas数据框行是否具有多个特定值
EN

Stack Overflow用户
提问于 2021-01-09 00:15:10
回答 2查看 86关注 0票数 0

我有一个Pandas数据帧,由下面的数据帧表示:

代码语言:javascript
复制
     A    B    C    D
 |   1    1    1    3    |
 |   1    1    1    2    |
 |   2    3    4    5    |

我需要遍历这个数据框,查找A、B和C列中的值匹配的行,如果是真的,检查D列中的值是否为这些行,并删除具有较小值的行。所以,在上面的例子中,之后会是这样的。

代码语言:javascript
复制
         A    B    C    D
    |    1    1    1    3    |
    |    2    3    4    5    |

我写了下面的代码,但是有些地方不对劲,导致了一个错误。它看起来也比它可能需要的更复杂,所以我想知道是否有更好、更简洁的方式来写这篇文章。

代码语言:javascript
复制
 for col, row in df.iterrows():
...     df1 = df.copy()
...     df1.drop(col, inplace = True)
...     for col1, row1 in df1.iterrows():
...             if df[0].iloc[col] == df1[0].iloc[col1] & df[1].iloc[col] == df1[1].iloc[col1] & 
                df[2].iloc[col] == df1[2].iloc[col1] & df1[3].iloc[col1] > df[3].iloc[col]:
...                     df.drop(col, inplace = True)
EN

回答 2

Stack Overflow用户

发布于 2021-01-09 00:28:02

如果存在多个唯一记录来获取必须保留的行的布尔索引,则可以按必须相等的所有变量进行分组(使用groupby(['A', 'B', 'C'])),然后排除D值最小的行(使用func)

代码语言:javascript
复制
def func(x):
    if len(x.unique()) != 1:
        return x != x.min()
    else:
        return x == x

df[df.groupby(['A', 'B', 'C'])['D'].apply(lambda x: func(x))]
    
    A   B   C   D
0   1   1   1   3
2   2   3   4   5

如果必须保留在D中仅具有最大组值的行。然后你可以使用下面的代码:

代码语言:javascript
复制
df[df.groupby(['A', 'B', 'C'])['D'].apply(lambda x: x == x.max())]
票数 1
EN

Stack Overflow用户

发布于 2021-01-09 00:42:18

这里有一个解决方案:

代码语言:javascript
复制
df[~((df[['A', 'B', 'C']].duplicated(keep=False)) & (df.groupby(['A', 'B', 'C'])['D'].transform(min)==df['D']))]

解释:

代码语言:javascript
复制
df[['A', 'B', 'C']].duplicated(keep=False)

返回具有'A‘、'B’、'C‘列的重复值的行的掩码

代码语言:javascript
复制
df.groupby(['A', 'B', 'C'])['D'].transform(min)==df['D']

为“”A“”、“”B“”、“”C“”每组返回“”D“”列的最小值的行的掩码。“

这些掩码的组合选择了所有这些行(重复的'A','B','C‘和组的最小'D’。使用~,我们选择除了这些行之外的所有其他行。

所提供输入的结果:

代码语言:javascript
复制
   A  B  C  D
0  1  1  1  3
2  2  3  4  5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65632568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档