【问题标题】:Find paired records after groupby Python在 groupby Python 之后查找配对记录
【发布时间】:2020-12-26 00:02:14
【问题描述】:

我有一个这样的数据框:

df = pd.DataFrame(
    [['101', 'a', 'in', '10'],
     ['101', 'a', 'out', '10'], 
     ['102', 'b', 'in', '20'], 
     ['103', 'c', 'in', '30'],
     ['103', 'c', 'out', '40']], 
    columns=['col1', 'col2', 'col3', 'col4']
)

我想按 col1 分组,并在 col2 和 col4 中找到具有相同值的配对记录,但一个在 col3 中有“in”,一个在 col3 中有“out”。预期结果是:

df_out = pd.DataFrame(
    [['101', 'a', 'in', '10'],
     ['101', 'a', 'out', '10']],
    columns=['col1', 'col2', 'col3', 'col4']
)

感谢您的帮助。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    让我们试试transformnunique

    out = df[df.groupby(['col1','col2','col4'])['col3'].transform('nunique')==2]
    Out[187]: 
      col1 col2 col3 col4
    0  101    a   in   10
    1  101    a  out   10
    

    【讨论】:

    • 感谢您的帮助!只是想添加一个关于此的后续问题,如果我有另一个日期时间列,比如 col5,并且我想专门查找“in”发生在“out”之前的记录,该怎么办?有没有办法修改代码来过滤结果?谢谢!
    • @J_jane sort_values with col5,然后执行 df[df.groupby(['col1','col2','col4'])['col3'].transform('sum')== '输入']
    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 2017-03-20
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多