使用自定义列以及Pandas DataFrame上的普通列进行查询

时间:2014-11-10 14:28:01

标签: python-3.x pandas

这是我的示例数据框和

  
    
      

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数据帧的通用解决方案。

1 个答案:

答案 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)]