python - 如何根据其他列中的值选择 pandas 数据框中的行以及如何为特定列中的每个不同值选择一行

标签 python pandas dataframe

我是 pandas 的新手,在根据其他列中的值从 DF 中选择值时遇到问题。 以下是我的数据框:

     C1     C2      C3              C4 
0    1234   1002    Operational     ABC
1    5678   2001    Closed          ABC
2    7896   1002    Operational     DEF
3    4321   4005    Closed          CDE
4    7781   4005    Operational     ABC

Q1。我想在 C2 中选择 C3 值为“操作”的重复值。 输出数据帧应该是

C1      C2      C3              C4 
1234    1002    Operational     ABC
7896    1002    Operational     ABC

我尝试过 df[(df.duplicate(['C2'], keep=False)) & df['C3'] == 'Operational'] 但它选择索引为 0,2,4 的行。但我只想将索引为 0 和 2 的行作为输出。

第二季度。如何为 C4 中的每个不同值选择一行。 输出数据帧应该是

    C1      C2      C3              C4  
    7896    1002    Operational     DEF
    4321    4005    Closed          CDE
    7781    4005    Operational     ABC

我可以获得有关这两个自定义选择的任何建议吗?

最佳答案

第一个解决方案更容易过滤两次 - 首先仅操作,然后重复:

df1 = df[df['C3'] == 'Operational'] 
df1 = df1[df1.duplicated(['C2'], keep=False)]
print (df1)
     C1    C2           C3   C4
0  1234  1002  Operational  ABC
2  7896  1002  Operational  DEF

什么是相同的,但可读性较差:

m1 = df['C3'] == 'Operational'
df1 = df[df[m1].duplicated(['C2'], keep=False) & m1]
print (df1)
     C1    C2           C3   C4
0  1234  1002  Operational  ABC
2  7896  1002  Operational  DEF

对于第二个问题,请使用 drop_duplicates使用参数 keep='last' 获取 C4 中重复项的最后一个值:

df2 = df.drop_duplicates('C4', keep='last')
print (df2)
     C1    C2           C3   C4
2  7896  1002  Operational  DEF
3  4321  4005       Closed  CDE
4  7781  4005  Operational  ABC

或者,如果有必要,仅删除连续的重复项:

mask = df['C4'].ne(df['C4'].shift()).cumsum().duplicated(keep=False)
df2 = df[~mask]
print (df2)
     C1    C2           C3   C4
2  7896  1002  Operational  DEF
3  4321  4005       Closed  CDE
4  7781  4005  Operational  ABC

关于python - 如何根据其他列中的值选择 pandas 数据框中的行以及如何为特定列中的每个不同值选择一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47434557/

相关文章:

python - 用 1 替换列中的非 Null 值

python - 一次迭代多个列表的最佳方法是什么?

python - 查找窗口失败

python - print dataframe.head 给出的输出不是一个漂亮的表格

python - Pandas , python 。如何根据观察次数过滤掉天数?

r - 查找源自唯一列的数据框中每一行的最小值

python - Pandas 将每个数据集行乘以多个向量

python - 如何使用多个分类变量以 Python R 风格创建预测模型

python - key 错误 : 'cross' when trying to do cartesian product with merge()

python - 回顾数据框中的上一行并选择特定记录