Pet*_*cas 3 python database pandas
我希望选择state包含“交易”一词trading _book且不以字母“E”、“L”、“N”开头的行
Test_Data = [('originating_system_id', ['RBCL', 'RBCL', 'RBCL','RBCL']),
('rbc_security_type1', ['CORP', 'CORP','CORP','CORP']),
('state', ['Traded', 'Traded Away','Traded','Traded Away']),
('trading_book', ['LCAAAAA','NUBBBBB','EDFGSFG','PDFEFGR'])
]
dfTest_Data = pd.DataFrame.from_items(Test_Data)
display(dfTest_Data)
originating_system_id rbc_security_type1 state trading_book
RBCL CORP Traded LCAAAAA
RBCL CORP Traded Away NUBBBBB
RBCL CORP Traded EDFGSFG
RBCL CORP Traded Away PDFEFGR
Run Code Online (Sandbox Code Playgroud)
期望的输出:
originating_system_id rbc_security_type1 state trading_book
RBCL CORP Traded Away PDFEFGR
Run Code Online (Sandbox Code Playgroud)
我认为这可以解决问题:
prefixes = ['E','L','N']
df_Traded_Away_User = dfTest_Data[
dfTest_Data[~dfTest_Data['trading_book'].str.startswith(tuple(prefixes))] &
(dfTest_Data['state'].str.contains('Traded'))
][['originating_system_id','rbc_security_type1','state','trading_book']]
display(df_Traded_Away_User)
Run Code Online (Sandbox Code Playgroud)
但我得到:
ValueError: Must pass DataFrame with boolean values only
Run Code Online (Sandbox Code Playgroud)
我建议分别创建每个布尔掩码以获得更好的可读代码,然后通过&以下方式将它们链接起来:
prefixes = ['E','L','N']
m1 = ~dfTest_Data['trading_book'].str.startswith(tuple(prefixes))
m2 = dfTest_Data['state'].str.contains('Traded')
cols = ['originating_system_id','rbc_security_type1','state','trading_book']
df_Traded_Away_User = dfTest_Data.loc[m1 & m2, cols]
print (df_Traded_Away_User)
originating_system_id rbc_security_type1 state trading_book
3 RBCL CORP Traded Away PDFEFGR
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |