用两个条件和多个值对数据帧求和
问题描述:
我有一个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
...其中t来自y和sum_c对于t大于a且小于b的所有行,c来自x的总和。
有人能帮助我吗?
答
这里是基于给定的条件(在乌拉圭回合问题列出不相当给定条件排队的预期结果)一个可能的解决方案:
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
这是伟大的,非常非常感谢! – mrhosman 2014-11-23 15:16:47
对你的出色答案进行小小的调整: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
2014-11-23 15:30:49
啊你的权利。有一个错字。只是做了改变 – leo 2014-11-24 01:52:56