根据另一个数据框向熊猫数据框列添加值

阿里巴赫蒂亚里

我有一个看起来像这样的数据框(df):

HOUSEID    PERSONID      WHY_TRP
20000017      1            1
20000017      1            1
20000017      1            1
20000017      2            1
20000017      2            3
20000231      1            11
20000231      1            11
20000231      2            11
20000521      1            11
20000521      2            11
20000521      2            3

每行描述一个人的旅行。我有另一种相同类型的数据框,其中每一行都描述一个人(df_p):

    HOUSEID   PERSONID   
    20000017      1      
    20000017      2     
    20000231      1    
    20000231      2    
    20000521      1    
    20000521      2 

我想在第二个数据框中添加三个新列,以显示每个人的1、3和11频率。基本上,我已经有了另一个具有其他功能的数据帧(df_p),所以我不应该使用groupby。由于某些原因,第一个和第二个数据框的人数不相同。这就是为什么我需要以下策略。这是我尝试的代码,但要花几个小时才能完成(100万次迭代):

df_p.insert(2, 'WHY_TRP_1', 0)
df_p.insert(3, 'WHY_TRP_2', 0)
df_p.insert(4, 'WHY_TRP_3', 0)

def trip_counter(i, r):
  if r[2] == 1:
    df_p.loc[(df_p['HOUSEID'] == r[0]) & (df_p['PERSONID'] == r[1]), ['WHY_TRP_1']] += 1 
  elif r[2] == 3:
    df_p.loc[(df_p['HOUSEID'] == r[0]) & (df_p['PERSONID'] ==  r[1]), ['WHY_TRP_3']] += 1 
  elif r[2] == 11:
    df_p.loc[(df_p['HOUSEID'] == r[0]) & (df_p['PERSONID'] ==  r[1]), ['WHY_TRP_11']] += 1


for i ,r in df.iterrows():
  trip_counter(i ,r) 

输出:

     HOUSEID   PERSONID   WHY_TRP_1     WHY_TRP_3      WHY_TRP_11
    20000017      1            3            0            0
    20000017      2            1            1            0
    20000231      1            0            0            2
    20000231      2            0            0            1
    20000521      1            0            0            1
    20000521      2            0            1            1          

有更快的方法吗?

谢谢

ky

你也可以做一个pivot_table,然后merge

m = df.pivot_table(index=['HOUSEID','PERSONID'],
                   columns='WHY_TRP',aggfunc=len,fill_value=0)

out= df_p.merge(m.add_prefix('WHY_TRP'),left_on=['HOUSEID','PERSONID'],right_index=True)

print(out)

    HOUSEID  PERSONID  WHY_TRP1  WHY_TRP3  WHY_TRP11
0  20000017         1         3         0          0
1  20000017         2         1         1          0
2  20000231         1         0         0          2
3  20000231         2         0         0          1
4  20000521         1         0         0          1
5  20000521         2         0         1          1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用熊猫基于另一个数据框向数据框添加列

比较两个数据框,然后根据另一个数据框向其中一个数据框添加新列

根据来自另一个数据框的行范围添加/填充熊猫列

根据另一个数据框的列填充熊猫数据框列

根据条件从另一个数据框的值向数据框添加新列

熊猫:根据另一个数据框中的值在数据框中添加新列

熊猫数据框-将列添加到另一个数据框

R-根据另一个数据框的列中的值满足的条件,在数据框列中添加值(由公式得出)

R:根据另一个数据框中的一列向数据框中添加一列会导致多个重复行

根据另一个数据框python熊猫替换列值-更好的方法?

根据熊猫中的另一个数据框更改列中的值

熊猫根据另一个数据框中的匹配列填充新的数据框列

大熊猫:根据另一个数据框的列选择数据框列

根据日期从另一个数据框中过滤熊猫数据框

根据另一个数据框创建新的熊猫数据框

根据另一个数据框生成熊猫数据框

根据索引号在另一个数据框中添加一列

如何根据熊猫中另一个数据框中的列对数据框进行排序?

从另一个数据框向Pandas数据框添加行

熊猫,从另一个数据框中添加列读取值

Pyspark:使用udf根据另一个数据框中的值向数据框中添加新列

如何使用取自另一个数据框的值向数据框添加新列?

通过转置另一个数据框的行向数据框添加新列

根据另一个数据框列更新数据框列,无需 for 循环

根据另一个数据框的列对数据框列进行排序

如何从一个数据框向另一数据框添加列?

如何根据熊猫的条件将缺失的行从一个数据框添加到另一个数据框?

根据另一个数据框检查数据框中的值,并附加值(如果存在)

根据来自另一个数据框的计数将列添加到数据框