python - 从一个数据框的列中获取唯一值并使用它来过滤另一个数据框中的行
问题描述
我希望使用 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中客户端存在的Amount的所有行求和:
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)
解决方案
如果需要按子字符串过滤,您可以使用join
with|
正则表达式:OR
mask = df2['Client'].str.contains('|'.join(df1.Client.unique()))
或者isin
如果想要按值过滤,请使用:
mask = df2['Client'].isin(df1.Client.unique())
df2['Amount'] = df2['Amount'].astype(int)
df2 = df2[mask].groupby(['Client','Product','currency_str'])['Amount'].agg(d).reset_index()
print(df2)
Client Product currency_str Amount
0 A GOVT USD 40
1 B GOVT GBP 20
推荐阅读
- android - 复制 SIM 卡导致设备下载运营商英国媒体报道但使用我自己的应用程序
- node.js - 如果尚未评分,则创建评分,如果评分存在则更新用户评分
- c++ - 字符串因未知原因而混乱
- javascript - 如何正确编写一个问候功能?
- javascript - 每次选择选择框时如何更新 React Date Picker
- amazon-s3 - 担心 SES 对象在 S3 中不可用是否合理?
- javascript - 为什么将 event.target 存储在变量中?
- python - Video stream not displayed on Tkinter screen
- javascript - How to hide an element when clicking in another element who shares the same classes in vanilla JavaScript?
- gatling - Randomising eventId of Post body with random ${orgId} but getting error as The input was not valid