python - 使用字典基于条件的数据框查找值
问题描述
我正在尝试根据其他列的内容在数据框的某些列中查找特定值。基本上,如果 column_1 中的一行 == 1,那么我们想要同一行中的数据,column_2。我有很多值要查找,所以我将它们存储在字典中,因为这似乎是解决问题的一种直观方法,但我无法坚持使用我的功能。我对功能还不是很好...
示例输入:
| patient_id | delirium_date | delirium_sae | syncope_date | syncope_sae | tia_date | tia_sae |
|------------|---------------|--------------|--------------|-------------|------------|---------|
| 1 | 01-08-2020 | 1 | | | | |
| 1 | 03-08-2020 | 0 | | | | |
| 2 | | | 02-08-2020 | 1 | | |
| 2 | | | 02-08-2020 | 1 | | |
| 3 | | | | | 04-08-2020 | 1 |
| 3 | 31-07-2020 | 0 | 01-07-2020 | 0 | 20-07-2020 | 0 |
| 3 | 02-08-2020 | 1 | | | | |
lookup_dictionary = {'delirium_sae' : 'delirium_date',
'syncope_sae' : 'syncope_date',
'tia_sae' : 'tia_date'}
因此,如果任何 column(dict(keys)) 设置为 '1',则获取 column(dict(values)) 所需的输出:
| patient_id | delirium_date | syncope_date | tia_date |
|------------|---------------|--------------|------------|
| 1 | 01-08-2020 | | |
| 1 | | | |
| 2 | | 02-08-2020 | |
| 2 | | 02-08-2020 | |
| 3 | | | 04-08-2020 |
| 3 | | | |
| 3 | 02-08-2020 | | |
注意:它不需要保留空的 patient_id 行或空列。
正如我所说,我不擅长使用函数,所以如果有人可以慢慢引导我,我应该在构建一个时考虑一下,那么我希望下次可以自己做......
解决方案
用于DataFrame.mask
根据与字典键关联的列来屏蔽与字典值关联的列:
keys, vals = dct.keys(), dct.values()
df1 = df[['patient_id']].join(df[vals].mask(df[keys].eq(0).to_numpy()))
结果:
print(df1)
patient_id delirium_date syncope_date tia_date
0 1 01-08-2020 NaN NaN
1 1 NaN NaN NaN
2 2 NaN 02-08-2020 NaN
3 2 NaN 02-08-2020 NaN
4 3 NaN NaN 04-08-2020
5 3 NaN NaN NaN
6 3 02-08-2020 NaN NaN
推荐阅读
- python - 方法链接和方法返回值
- python-3.x - 在多个文本框中输出文本而不是单个..tkinter python
- php - Laravel 安装问题
- .net - STRIPE .NET/REACT-NATIVE:出现错误但 API 调用仍然通过
- c++ - 为什么要将结构包装在匿名联合中?(STL msvc 实现)
- android - 如何使用 gradle kotlin dsl 从 Heap.io 定义 ext 属性
- javascript - 如何从 MouseEvent 对象中获取单击元素的索引号
- salesforce - Soql 对象对用户有多个查找
- angular - 等待角度异步订阅
- c++ - 在 CLion 和 Cmake 中设置外部头文件和链接器库的问题