Я хочу использовать один столбец в df1 в качестве фильтра для df2:
df1 = [('Client', ['A', 'A', 'A', 'B', 'C', 'D', 'D',]),
('Num_Trades', ['1', '2', '3', '1', '1', '1', '1',])
]
df1 = pd.DataFrame.from_items(df1)
display(df1)
Client Num_Trades
0 A 1
1 A 2
2 A 3
3 B 1
4 C 1
5 D 1
6 D 1
Теперь извлеките уникальные клиенты из df1:
mask_array = df1.Client.unique()
mask_array = dataframe=pd.DataFrame(mask_array, columns=['Client'])
# mask_list = df1['Client'].unique().tolist()
# mask_list = dataframe=pd.DataFrame(mask_list, columns=['Client'])
display(mask_array)
Client
0 A
1 B
2 C
3 D
Пример кадра данных для фильтрации:
df2 = [('Client', ['A', 'B', 'A', 'Y',]),
('Product', ['GOVT', 'GOVT', 'GOVT', 'GOVT',]),
('currency_str', ['USD', 'GBP', 'USD', 'NZD',]),
('Amount', ['10', '20', '30', '40',]),
]
# create pandas df
df2 = pd.DataFrame.from_items(df2)
display(df2)
Client Product currency_str Amount
0 A GOVT USD 10
1 B GOVT GBP 20
2 A GOVT USD 30
3 Y GOVT NZD 40
Желаемый результат - это просто все строки, суммированные в сумме, где клиент существует в df1:
Client Product currency_str Amount
A GOVT USD 40
B GOVT GBP 20
Мой код создает объекты 'DataFrame', которые могут изменяться, поэтому их нельзя хэшировать. Я попытался использовать массив и список, а также. Итак, что нужно сделать с уникальным набором записей, чтобы их можно было использовать в качестве фильтра для df2?
d = [
('Amount', 'sum')
]
# aggregate
mask = df2['Client'].str.contains(mask_list)
df2 = df2[mask].groupby(['Client','Product','currency_str'])['Amount'].agg(d).reset_index()
display(df2)