这是我的示例数据框和
df
index,Customer_MailID,Event_Quantity,Amount_Final,Channel,Week_Name,Venue_Name,Event_Genre1
1,aa@hotmail.com,2,172,Web,MON-TO-THU,Tivoli Cinema: Extreem,COMEDY
2,bb@gmail.com,2,234,Web,MON-TO-THU,CineMAX: Pacific Mall Subhash Nagar,ACTION
3,cc@yahoo.com,3,502,Mobile,MON-TO-THU,DT City Centre: Shalimar Bagh,ACTION
4,dr.d@gmail.com,4,1402,Web,Sunday,Rajiv Gandhi Cricket Stadium: Hyderabad,SPORTS
5,dd@hotmail.com,4,6449,Web,Saturday,Subrata Roy Sahara Stadium: Gahunje,SPORTS
6,deep.d@gmail.com2,1,82,Mobile,MON-TO-THU,Tivoli Cinema: Hyderabad,ACTION
7,r@yahoo.co.in,1,219,Web,MON-TO-THU,INOX:JP Nagar -Central Mantri Junction,ACTION
8,nnd@gmail.com,2,384,Web,MON-TO-THU,Wave: City Emporium Mall,ACTION
9,v90@gmail.com,4,1402,Web,Sunday,Rajiv Gandhi Cricket Stadium: Hyderabad,SPORTS
我想对它执行以下类型的查询..
选择数据框的列集(或)数据框的所有列,其中, ((Sum(Amount)> = 1000))&& (Event_Quantity< 5))等等。添加了许多与&混合的条件。和|条件。 我们面临的问题是原始数据框上没有这样的列(sum(Amount))。在这种情况下 有没有可用于查询pandas数据帧的通用解决方案。
答案 0 :(得分:0)
在您的示例中,每个Customer_MailID的数据仅使用一次。我假设在实际数据中有多个会产生和(Amount_Final)!= Amount_Final。如果这个假设是正确的,那么一个解决方案是创建一个列来携带Amount_Final的总和,然后在你的子集中使用它。
这样的事情:
totalAmount = pd.DataFrame( df.groupby('Customer_MailID')['Amount_Final'].sum()).reset_index()
totalAmount.columns = ['Customer_MailID', 'Total_Amount_Final']
df = df.merge(totalAmount)
此时您将有一个名为Total_Amount_Final的新列,您可以在子集中使用,如下所示:
df[(df.Total_Amount_Final > 1000) & (df.Event_Quantity <5)]