Pandas条件分割,按列表排列

时间:2016-11-23 17:11:55

标签: python pandas if-statement dataframe division

我试图将一个if条件应用于pandas系列,然后对一个列表中的整数值应用除法操作到同一数据帧中的另一个系列。

我尝试申请的逻辑如下:如果hh_cat系列中的家庭类别与i的当前值匹配,则将消费系列除以相关的总数按列表值family_con[i-1]给出的家庭消费子组。

for i in hh_cat:
   result = mod_df[(mod_df["hh_cat"]==i)].div()["consumption"](family_con[i-1])
TypeError                                 Traceback (most recent call last)
<ipython-input-120-219bc0ce5a07> in <module>()
  1 for i in hh_cat:
----> 2     result = mod_df[(mod_df["hh_cat"]==i)].div()["consumption"] (family_con[i-1])

TypeError: f() takes at least 2 arguments (1 given)

2 个答案:

答案 0 :(得分:0)

使用合并可能会有所帮助:

首先将列表转换为数据框:

df = pd.DataFrame(family_con,columns=['cons'])

接下来,将一列添加到与索引匹配的原始数据框中,并可用于加入:

mod_df["hh_cat_join"]= mod_df["hh_cat"]-1

接下来执行加入:

merged_df=mod_df.merge(df,how='left',left_on='hh_cat_join',right_index=True)

最后进行计算并将其保存在结果栏中:

merged_df['result']=merged_df['consumption']/merged_df['cons']

答案 1 :(得分:0)

我很少知道变量hh_cat和列'hh_cat'之间的联系,但我认为您可以添加名为hh_cat_var的列(对应于您的变量&{ #39;重复遍历)并执行

mod_df[mod_df['hh_cat'] == mod_df['hh_cat_var']]....