python - 如何在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
解决方案
解决您的问题的最简单方法是pd.merge
通过双键处理带有家庭数据的个人数据,这将是household_id
和channel
data = pd.merge(ind, household, how = 'left', on = ['household_id', 'channel'], left_index = False)
然后,您可以FS_NFS
根据channel_y
变量中的非缺失值创建列。
推荐阅读
- python - 如何在ansible中打印python请求响应
- python - 如何使用 numpy meshgrid 执行 ND 坐标扫描
- wpf - 是否可以在 Prism WPF 项目和 Prism Forms 之间使用通用视图模型(尤其是导航)?
- javascript - 如何调整 D3 折线图上的线性轴以适应更大的域
- spring-boot - 如何删除 hasAuthority 中的 SCOPE_ 前缀
- android - Binding 的值没有显示在 ios 中,但在 android 上正常工作
- javascript - “二维”是什么意思
- swift - 子上下文 - 删除对象而不保存?
- llvm - LLVM IR 是否具有重复变量名的范围?
- wordpress - 卸载 WPS 隐藏登录