使用两个条件和多个值对DataFrame求和

时间:2014-11-23 13:57:03

标签: python pandas dataframe

我有一个包含三列的DataFrame x;

    a   b   c    
1   1   10  4   
2   5   6   5   
3   4   6   5   
4   2   11  9         
5   1   2   10    

......和两个值的系列y;

    t
1   3
2   7

现在我想获得一个包含两列的DataFrame z;

    t   sum_c     
1   3   18
2   7   13

...来自y和sum_c的t是来自x的所有行的c之和,其中t大于a且小于b。

有人能帮我这个吗?

1 个答案:

答案 0 :(得分:0)

这是一个基于给定条件的可能解决方案(在你的问题中列出的预期结果与给定条件完全一致):

In[99]: df1

Out[99]: 
   a   b   c
0  1  10   4
1  5   6   5
2  4   6   5
3  2  11   9
4  1   2  10

In[100]: df2

Out[100]: 
   t
0  3
1  5

然后编写一个稍后将由pandas.apply()使用的函数:

In[101]: def cond_sum(x):
    return sum(df1['c'].ix[np.logical_and(df1['a']<x.ix[0],df1['b']>x.ix[0])])

最后:

In[102]: df3 = df2.apply(cond_sum,axis=1)

In[103]: df3
Out[103]: 
0    13
1    18
dtype: int64