将系列的每个值与pandas中另一个系列的每个其他值进行比较

时间:2018-06-01 05:38:15

标签: python pandas numpy dataframe

考虑我有两个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 dataframe中的新列

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 ---数据帧

1 个答案:

答案 0 :(得分:0)

在底层数组上使用广播的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