I have a small dataframe: enter image description here

如果至少有一行具有相同/重复的ID,并且其Bad_Loan为True,我希望将Bad_Loan更改为True.例如,ID 123重复2次,1行具有TRUE BAD_LOAN,1行具有NAN BAD_LOAN.我想将具有NaN值的重复ID更改为True.

So my desired output is a dataframe like this enter image description here

我读过多种解决方案,但它们解决了如何根据另一列中的值赋值的问题.我真的被我的问题缠住了.对我的问题有什么 idea 吗?非常感谢

推荐答案

我对Pandas 了解不多,所以我的解决方案可能不是最好的,但我有一个建议:

如果您的ID列是一个索引,也许您可以利用这样一个事实,即np.NaN总是被认为是<(小于),而不是True甚至False(某种程度上……NaN和布尔值之间的布尔比较将始终计算为False).因此,(FalseNaN)的max值将是False,或者(TrueNaN)的max值将是True.

让我们从一些示例数据开始:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "ID": [123, 123, 345, 345, 678, 678],
    "bad_loan": [True, np.NaN, np.NaN, np.NaN, False, np.NaN],
})
df = df.set_index('ID')

ID分组,取bad_loan列中的.max()列.这将尽可能丢弃NaN(S):

non_nans = df.groupby('ID')['bad_loan'].agg(np.max)
print(non_nans)
# Outputs:
# ID
# 123     True
# 345      NaN
# 678    False

现在,你只需要告诉Pandas 在你的df中填满NaN,从你的non_nans系列中获取值,按公共指数合并,也就是按ID列:

df = df.fillna({'bad_loan': non_nans})
print(df)
# Outputs:
# ID          
# 123     True
# 123     True
# 345      NaN
# 345      NaN
# 678    False
# 678    False

Python相关问答推荐

查找两极rame中组之间的所有差异

可变参数数量的重载类型(args或kwargs)

Pandas - groupby字符串字段并按时间范围 Select

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

将tdqm与cx.Oracle查询集成

使用Python更新字典中的值

pandas:排序多级列

如何在UserSerializer中添加显式字段?

转换为浮点,pandas字符串列,混合千和十进制分隔符

如何在图中标记平均点?

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

Python—转换日期:价目表到新行

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

使用Python异步地持久跟踪用户输入

如何合并具有相同元素的 torch 矩阵的行?

计算机找不到已安装的库'

python的文件. truncate()意外地没有截断'

如何在SQLAlchemy + Alembic中定义一个"Index()",在基表中的列上

用由数据帧的相应元素形成的列表的函数来替换列的行中的值

对包含JSON列的DataFrame进行分组