在数据框中由另一列链接的两行之间的所有列中查找不匹配

learning_python_self

我有一个包含许多列和行的大 df,通常每个标识符有两行,因为 df 用于对帐。有没有办法简化导致不匹配的非标识符列的识别?

import pandas as pd

df = pd.DataFrame({'col_1':       ['A', 'B', 'C', 'B', 'C', 'D', 'E'],
                    'identifier': [  1,   2,   3,   2,   3,   4,   4],
                    'col_3':      [ 10,  20,   30,  21, 31,  40,  41],
                    'col_4':      [  1,   1,    1,   1,  1,   1,   1]
                    })

在上面的df中,它将是

  • col_1 用于标识符 4(D 与 E)
  • col_3 用于标识符 2/3/4(20 与 21、30 与 31、40 与 41)

对任何可以轻松隔离导致不匹配的列、它们的值和标识符的表示形式开放。

莫兹韦

IIUC,您可以将列聚合为集合并保留具有多个元素的列:

s = df.groupby('identifier').agg(set).stack()
out = s[s.str.len().gt(1)]

输出:

identifier       
2           col_3    {20, 21}
3           col_3    {30, 31}
4           col_1      {D, E}
            col_3    {40, 41}
dtype: object

进一步聚合:

out.reset_index(level=1)['level_1'].groupby(level=0).agg(list)

输出:

identifier
2           [col_3]
3           [col_3]
4    [col_1, col_3]
Name: level_1, dtype: object

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章