2014-11-23 1 views
1

У меня есть DataFrame x с тремя столбцами;Суммирование на DataFrame с двумя условиями и несколькими значениями

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 

... с т от у и sum_c суммы с от й для всех строк, где т был больше, чем и меньше, чем б.

Кто-нибудь сможет мне помочь?

ответ

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 

затем написать функцию, которая будет использоваться на панд. применить() позже:

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 
+0

Это большое, много много спасибо !!! – mrhosman

+0

Небольшая настройка для вашего отличного ответа: import pandas as pd import numpy as np df1 = pd.DataFrame ({'a': pd.Series ([1,5,4,2,1]), 'b': pd.Series ([10,6,6,11,2]), 'c': pd.Series ([4,5,5,9,10])}) df2 = pd.DataFrame ({'t' : pd.Series ([3,5])}) def cond_sum (x): return sum (df1 ['c']. ix [np.logical_and (df1 ['a'] x.ix [0])]) pd.concat ([df2, pd.DataFrame ({'sum_c': df2.apply (cond_sum, axis = 1)})], axis = 1) – mrhosman

+0

ах ур права. была опечатка. просто сделал изменение – leo

Смежные вопросы