Python 数据帧中groupby和conditional之后的除法
我有一个Python 数据帧中groupby和conditional之后的除法,python,pandas,Python,Pandas,我有一个df,它有数值评级、当前余额和新到期列。我想按新到期日分组,然后找到与数值评级>0.2相关的当前余额之和除以仅分组后的当前余额之和。我通过使用两个数据帧并将相应的值分割,然后将其放入一个dict d中,以下面的方式进行操作,但我想知道是否有更好的方法: df_rat = df[df['Numeric Rating'] > 0.2] W=df_rat.groupby(['New Maturities']).agg({'Current Balance':'sum'}).reset_in
df
,它有数值评级
、当前余额
和新到期
列。我想按新到期日
分组,然后找到与数值评级>0.2相关的当前余额
之和除以仅分组后的当前余额
之和。我通过使用两个数据帧并将相应的值分割,然后将其放入一个dict d
中,以下面的方式进行操作,但我想知道是否有更好的方法:
df_rat = df[df['Numeric Rating'] > 0.2]
W=df_rat.groupby(['New Maturities']).agg({'Current Balance':'sum'}).reset_index()
W_=df.groupby(['New Maturities']).agg({'Current Balance':'sum'}).reset_index()
d = {}
for i in list(W['New Maturities']):
d[str(i)] = W[W['New Maturities'] == i]['Current Balance'].values/W_[W_['New Maturities'] == i]['Current Balance'].values
df
如下所示,共有378行:
import pandas as pd
from io import StringIO
data = '''New Maturities,Current Balance,Numeric Rating
7,3400000,0.075
7,1945904,0.200
5,2000000,0.300
5,118812,0.400
5,79208,0.300'''
df = pd.read_csv(StringIO(data), sep = ',', header = 0)
谢谢改进此方法的一个方法是完全消除for循环
import pandas as pd
from io import StringIO
data = '''New Maturities,Current Balance,Numeric Rating
7,3400000,0.075
7,1945904,0.200
5,2000000,0.300
5,118812,0.400
5,79208,0.300'''
df = pd.read_csv(StringIO(data), sep = ',', header = 0)
df_rat = df[df['Numeric Rating'] > 0.2]
W=df_rat.groupby(['New Maturities']).agg({'Current Balance':'sum'})
W_=df.groupby(['New Maturities']).agg({'Current Balance':'sum'})
d=W_/W
d
是一个系列,您可以使用d.to_dict
我所做的就是删除reset\u索引
,这样这些W
将保持序列,我们可以允许pandas.series.div使用我们想要的索引,然后使用分割
另一方面,与之关系不大的是自定义agg函数。我说的只是轻微的相关,因为我想不出一种方法来在你的场景中使用它们,而你的方法已经非常直接了。如果它可能引发其他想法,下面是答案。不幸的是,agg函数一次只接受一个序列。改进此方法的一个方法是完全消除for循环
import pandas as pd
from io import StringIO
data = '''New Maturities,Current Balance,Numeric Rating
7,3400000,0.075
7,1945904,0.200
5,2000000,0.300
5,118812,0.400
5,79208,0.300'''
df = pd.read_csv(StringIO(data), sep = ',', header = 0)
df_rat = df[df['Numeric Rating'] > 0.2]
W=df_rat.groupby(['New Maturities']).agg({'Current Balance':'sum'})
W_=df.groupby(['New Maturities']).agg({'Current Balance':'sum'})
d=W_/W
d
是一个系列,您可以使用d.to_dict
我所做的就是删除reset\u索引
,这样这些W
将保持序列,我们可以允许pandas.series.div使用我们想要的索引,然后使用分割
另一方面,与之关系不大的是自定义agg函数。我说的只是轻微的相关,因为我想不出一种方法来在你的场景中使用它们,而你的方法已经非常直接了。如果它可能引发其他想法,下面是答案。不幸的是,agg函数一次只接受一个系列