首页 > 解决方案 > 如何在python中的两个数据框之间添加列并按条件填充它的值

问题描述

我有以下2个数据集:

个人数据

   household_id     member_id   channel  event_begin    event_end
0   1                  1          100      83098          83300
1   1                  2          100      83150          83600
2   1                  1          200      83700          83865
3   1                  2          200      83931          83963
4   1                  3          200      84367          84532
5   1                  4          450      84598          84721
6   2                  1          300      83841          83906
7   2                  2          300      78219          78500

家庭数据

    household_id    channel    Begin     End
  0     1             100      83098    83600
  1     1             200      84367    84532
  2     2             300      83841    83906
  3     2             300      78219    78452

我想添加列,Individual data['FS_NFS']好像Household data在个人数据中具有相同的family_id和频道(即个人和家庭数据具有相同的id =(household_id&channel))

如果满足以下条件,现在我想放入'FS''FS_NFS'Individual Data

(indv['event_begin']>=HH['Begin']) & (indv['event_end']<=HH['End']) & 
       (indv['household_id']==HH['household_id']) & (indv['channel']==HH['channel'])

否则我想'NFS'在列'FS_NFS'Individual data

预期的 O/p:

   household_id     member_id   channel  event_begin    event_end  FS_NFS
0   1                  1          100      83098          83300      FS
1   1                  2          100      83150          83600      FS
2   1                  1          200      83700          83865      NFS 
3   1                  2          200      83931          83963      NFS 
4   1                  3          200      84367          84532      FS
5   1                  4          450      84598          84721      NFS (Channel not prsent in both)
6   2                  1          300      83841          83906      FS
7   2                  2          300      78219          78500      NFS

标签: pythonpython-3.xif-statementlogicwhere-clause

解决方案


解决您的问题的最简单方法是pd.merge 通过双键处理带有家庭数据的个人数据,这将是household_idchannel

data = pd.merge(ind, household, how = 'left', on = ['household_id', 'channel'], left_index = False)

然后,您可以FS_NFS根据channel_y变量中的非缺失值创建列。


推荐阅读