【问题标题】:Count the intersections between duplicates using Pandas使用 Pandas 计算重复项之间的交叉点
【发布时间】:2017-09-25 09:45:13
【问题描述】:

我有一个如下所示的数据框:

Symbols Count
A       3
A       1
A       2
A       4
B       1
B       3
B       9
C       2
C       1
C       3

我想使用 Pandas 做的是识别“计数”列上的重复行,但我想计算符号在重复项上相互交叉的次数。

我的意思是,如果一个 Count 值使用两个不同的符号出现两次。这些符号被列为它们之间有一个交集,因为它们共享相同的 Count 值。

类似这样的:

Symbol Symbol Number of Intersections
A       B      2
B       A      2
C       A      3
.....

我确信有一种 Pythonic Pandas 方法可以做到这一点。但没想到。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    让我们使用merge 进行自我合并,然后使用querygroupby

    df_selfmerge = df.merge(df, on='Count', how="inner").query('Symbols_x != Symbols_y')
    
    (df_selfmerge.groupby(['Symbols_x','Symbols_y'])['Count']
             .count()
             .reset_index()
             .rename(columns={'Symbols_x':'Symbol',
                              'Symbols_y':'Symbol',
                              'Count':'Number of Intersections'}))
    

    编辑:使用 size() 只是在 NaN 值的情况下更安全

    (df_selfmerge.groupby(['Symbols_x','Symbols_y'])['Count']
             .size()
             .reset_index()
             .rename(columns={'Symbols_x':'Symbol',
                              'Symbols_y':'Symbol',
                              0:'Number of Intersections'}))
    

    输出:

      Symbol Symbol  Number of Intersections
    0      A      B                        2
    1      A      C                        3
    2      B      A                        2
    3      B      C                        2
    4      C      A                        3
    5      C      B                        2
    

    【讨论】:

    • 谢谢,这是我需要的。我的第二个问题是对于“计数”列将是一列字符串的情况该怎么办,因为这个问题也很快会出现在我身上。即字符串中的相似性而不是整数字符。
    • 不客气。完全相同的字符串不是问题。当您说字符串中的相似性时,这对我来说似乎是模糊的逻辑。您可能需要提交一个新的数据问题。感谢您的支持和接受!
    • 不客气,我当然是指完全相同的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2013-04-25
    • 2021-01-02
    相关资源
    最近更新 更多