python - 如何识别每个 id 的不完整详细信息?
问题描述
我有以下数据框:
emp_id male female Month_Year
423 0 0 March-2016
423 0 0 April-2016
423 0 1 May-2016
423 0 1 June-2016
789 1 0 June-2017
789 1 0 July-2017
789 1 0 August-2017
789 0 0 September-2017
856 1 0 March-2018
856 1 0 April-2018
987 0 1 June-2019
987 0 1 July-2019
987 0 1 August-2019
请注意列male
中female
的值,如下所述:
1 - "Yes"
0 - "No"
我需要这样的东西
预期数据框:
请注意Var
列中的数值表示如下:
1 - "the gender details are not missing"
0 - "the gender details are missing"
另外,请注意,一个 emp_id 可以是男性或女性,而不是两者。
如果在列male
和中观察到female
,
对于emp_id 423
,前两行没有性别详细信息。所以我在 Var 列中将值设为零。
对于emp_id 789
,最后一行缺少性别详细信息。所以我在 Var 列中提到了零。
对于emp_id 856 and 987
,在特定时期内不会丢失性别详细信息。所以我在 Var 列中给出了一个值。
我使用了以下代码:
mask = (df.assign(zeros=df['male'].eq(0))
.groupby('emp_id')[['male', 'zeros']]
.transform('sum')
.all(axis=1))
df1 = df[mask]
print (df1)
mask = (df.assign(zeros=df['female'].eq(0))
.groupby('emp_id')[['female', 'zeros']]
.transform('sum')
.all(axis=1))
df2 = df[mask]
print (df2)
上述代码的输出:
通过使用上面的代码,我能够分别捕获在男性和女性列中缺少详细信息的 emp_id。
有没有其他方法可以一次比较两列(男性和女性)并表示 Var 列中缺失的细节。
所以请告诉我解决方案:
提前致谢!
解决方案
尝试这个:
df['var'] = (df.male + df.female).groupby(df.emp_id).transform('min')
In [39]: df
Out[39]:
emp_id male female Month_Year var
0 423 0 0 March-2016 0
1 423 0 0 April-2016 0
2 423 0 1 May-2016 0
3 423 0 1 June-2016 0
4 789 1 0 June-2017 0
5 789 1 0 July-2017 0
6 789 1 0 August-2017 0
7 789 0 0 September-2017 0
8 856 1 0 March-2018 1
9 856 1 0 April-2018 1
10 987 0 1 June-2019 1
11 987 0 1 July-2019 1
12 987 0 1 August-2019 1
推荐阅读
- azure-devops - 当团队的区域路径关联发生变化时,为什么仪表板上的 Burndown 小部件会丢失数据?
- javascript - 在 ReactJS 中使用 PWA
- c++ - 如果/否则(初学者)
- java - 类型不匹配:无法从 Object 转换为 AccountDAO
- php - Ubuntu 服务器 apache2
- java - 如何使用 Java 访问 Kubernetes for MongoDB 中的凭据?
- java - 无法使用 Spring 处理程序捕获 LDAP CommunicationException
- here-api - 带有 Suite 或其他辅助地址的地址不会产生自动完成结果
- ios - 打开 iOS 控制中心后未执行附加到窗口事件的回调函数
- python - Python如何在codecs.decode中插入变量?