[英]Boolean operations across multiple rows and columns in Pandas
我正在對兩列和前兩行中的True值進行測試-本質上是任一列為true或前兩個值是否應該返回true。
我想出了這個可行的方法:
Data['BS Buy Flag']=((Data['DivDown']==True) | (Data['DivDown'].shift(1)==True) | (Data['DivDown'].shift(2)==True) | (Data['KelknerDown']==True) | (Data['KelknerDown'].shift(1)==True) | (Data['KelknerDown'].shift(2)==True))
但這是如此聰明-必須有更好的方法來做到這一點...
可能不值得(從計算/內存角度而言),但是如果您的代碼損害了自尊心並使您無法入睡,則可以嘗試以下操作:
df_list = [Data['DivDown'],
Data['DivDown'].shift(1),
Data['DivDown'].shift(2),
Data['KelknerDown'],
Data['KelknerDown'].shift(1),
Data['KelknerDown'].shift(2)]
# Create a new df using df_list, preserving index
check_df = reduce(lambda x, y, pd.merge(x.to_frame(), y.to_frame(), left_index=True, right_index=True), df_list)
# Write over check_df with result
check_df = check_df.any(axis=1) # Returns True if any value in a row is True
# Merge check_df to original data
Data = pd.merge(check_df.to_frame(), Data, left_index=True, right_index=True, how='inner')
現在,您應該在“數據”中有一個附加列可以檢查。 就像我說的那樣,除非您擁有非常龐大的數據集或需要跟蹤的大量條件,否則它可能不會高效。
如果需要,您還可以存儲條件進行其他分析(功能選擇,聚類等)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.