Нужно получить вычисление для каждого пользователя, противоположного всему фрейму данных, из df1.
import pandas as pd
import numpy as np
df = pd.DataFrame({'user': ['Mike', 'Mike', 'Mike','Mike', 'Mike', 'Mike','Mike',
'Mike', 'Mike','Mike','Mike', 'Mike','Mike', 'Mike',
'Mike','Mike','Mike', 'Mike','Mike', 'Mike', 'Mike',
'Mike', 'Mike','Mike'],
'income': [47559,70850,60081,73353,52043,69038,55156,54532,
64937,73780,69577,68116,42777,55733,44923,51096,
74317,75160,52160,56356,74077,70007,69407,79659]})
df1 = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Bob', 'Jane', 'Alice','Bob',
'Jane', 'Alice','Bob','Jane','Alice','Bob','Jane',
'Alice','Bob', 'Jane','Alice','Bob', 'Jane', 'Alice',
'Bob', 'Jane', 'Alice'],
'income': [93426,40594,60920,76683,70643,77195,60496,75527,
76784,93686,48243,94225,89828,82593,74815,46937,
43372,58319,95770,67525,97085,65901,92556,57715]})
x1 = df['income']
x2 = df1['income'] ### Need this by user opposed to all of df1 'income'
a = max(x1); b = max(x2)
maxval = max(a,b)
c = min(x1); d = min(x2)
minval = max(c,d)
h1, bins= np.histogram(x1, bins = 20, range = (minval, maxval))
h2, _ = np.histogram(x2, bins = 20, range = (minval, maxval))
minval
def return_intersection(h1, h2):
minima = np.minimum(h1, h2)
intersection = np.true_divide(np.sum(minima), np.sum(h2))
return intersection
print(round(return_intersection(h1,h2),2))
Конечная цель состоит в том, чтобы рассчитать перекрытие для каждого пользователя в df1 на df: фактический расчет будет отличатьсяиз приведенных ниже. Числа ниже составлены.
Bob .54
Jane .67
Alice .28
Расчет работает, просто нужно рассчитать его по пользователю.
Попытка использовать, но не повезло, потому что расчет не выполнялся для каждого пользователя:
df1_grouped = df1.groupby('user')
# iterate over each group
for group_name, df_group in df1_grouped:
for row_index, row in df_group.iterrows():
col = row['income']