【问题标题】:Compare each value of a Series against every other value from another Series in pandas将一个系列的每个值与熊猫中另一个系列的每个其他值进行比较
【发布时间】:2018-06-01 05:38:14
【问题描述】:

假设我有两个 pandas 数据框

df = pd.DataFrame()
df['r_no'] = [1,1,1,2,3,1,1,1,2]
df['user'] = ['sam','sam','sam','sam','peter','jack','jack','Kris','peter']
df['value'] = [76,76,7,8,8,2,29,2,8]
df['cam_id'] = ['ab','abc','ab','ab','ab','abcd','abcd','abcd','ab']

df_2 = pd.DataFrame()
df_2['r_no'] = [1,3,2,2,4,1,1,3,2,5,7,2,8,9,3]

df
   r_no   user  value cam_id
0     1    sam     76     ab
1     1    sam     76    abc
2     1    sam      7     ab
3     2    sam      8     ab
4     3  peter      8     ab
5     1   jack      2   abcd
6     1   jack     29   abcd
7     1   Kris      2   abcd
8     2  peter      8     ab

df_2 
    r_no
0      1
1      3
2      2
3      2
4      4
5      1
6      1
7      3
8      2
9      5
10     7
11     2
12     8
13     9
14     3

预期输出 df 数据框中的新列

df['count_greaterandequal']
0     3
1     3
2     3
3     7
4    10
5     3
6     3
7     3
8     7

计算数量 df---dataframe 中的 r_no等于或大于 df_2---数据帧

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    在底层数组上使用广播的 numpy 比较来提高性能。

    df['count_greaterandequal'] = (df.r_no.values >= df_2.r_no[:, None]).sum(0)
    
    df
       r_no   user  value cam_id  count_greaterandequal
    0     1    sam     76     ab                      3
    1     1    sam     76    abc                      3
    2     1    sam      7     ab                      3
    3     2    sam      8     ab                      7
    4     3  peter      8     ab                     10
    5     1   jack      2   abcd                      3
    6     1   jack     29   abcd                      3
    7     1   Kris      2   abcd                      3
    8     2  peter      8     ab                      7
    

    【讨论】:

    • 你能解释一下None部分为什么不计算@coolspeed
    • @andjkd 那是“广播”部分。每个元素都与其他元素进行比较,你会得到一个布尔掩码,其中 True == 1 和 False == 0。因此,将 True 元素相加,这与计算它们相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多