【发布时间】:2021-07-05 08:53:14
【问题描述】:
我正在编写一些程序来计算两个数据帧之间的匹配项数。
例如,
A is the dataframe as : A = pd.DataFrame({'pick_num1':[1, 2, 3], 'pick_num2':[2, 3, 4], 'pick_num3':[4, 5, 6]})
B is the answer I want to match, like:
B = pd.DataFrame({'ans_num1':[1, 2, 3], 'ans_num2':[2, 3, 4], 'ans_num3':[4, 5, 6], 'ans_num4':[7, 8, 1], 'ans_num5':[9, 1, 9]})
DataFrame A
pick_num1 pick_num2 pick_num3 match_num
0 1 2 4 2
1 2 3 5 2
2 3 4 6 2
DataFrame B
ans_num1 ans_num2 ans_num3 ans_num4 ans_num5
0 1 2 4 7 9
1 2 3 5 8 1
2 3 4 6 1 9
我想在 A 的末尾追加一个 ['match_num'] 的新列。
现在我试着写了一个映射函数来比较和计算,发现速度不是那么快,而数据帧很大,函数如下:
def win_prb_func(df1, p_name):
df1['match_num'] += np.sum(pd.concat([df1[p_name]]*5, axis=1).values==df1[open_ball_name_ls].values, 1)
return df1
def compute_win_prb(df1):
return list(map(lambda p_name: win_prb_func(df1, p_name), pick_name_ls))
df1 = pd.concat([A, B], axis=1)
df1['win prb.'] = 0
result_df = compute_win_prb(df1)
其中pick_name_ls 是 ['pick_num1', 'pick_num2', 'pick_num3'],open_ball_name_ls 是 ['ans_num1', 'ans_num2', 'ans_num3', 'ans_num4', 'ans_num5']。
我想知道是否有可能使计算比我更快或更智能?
现在的性能是:0.015626192092895508 秒
谢谢你帮助我!
【问题讨论】:
标签: python pandas dataframe performance