我的输入是DataFrame和Dictionnary:

import pandas as pd

df = pd.DataFrame({'A': ['foo', None, '2'],
 'B': ['baz', '1', '4'],
 'C': [None, 'bar', None],
 'D': [None, None, None]})

#      A    B    C   D
# 0  foo  baz  NaN NaN
# 1  NaN    1  bar NaN
# 2    2    4  NaN NaN

dict_ = {
    "A": "CONDTIONNAL",
    "B": "MANDATORY",
    "C": "MANDATORY",
    "D": "OPTIONAL"
}

我希望将多字符串作为输出:

"""
    Column A is OK
    Column B is OK
    Column C is not OK / values missing at [0, 2]
    Column D is OK
"""

我首先判断值是否为空,但不幸的是,值被折叠了:

df.isnull().any().to_dict()

{'A': True, 'B': False, 'C': True, 'D': True}

你能帮我弄清楚复数弦吗?理想情况下,如果我们可以创建一个自定义函数,返回一个布尔值:如果所有列都有效,则返回True,否则返回False,我会非常高兴.

推荐答案

使用布尔运算:

# flag invalid rows when value is MANDATORY
invalids = df.isnull() & pd.Series(dict_).eq('MANDATORY')

# get invalid indices
idx, cols = np.where(invalids)
# aggregate as list
rows = pd.Series(idx, index=df.columns[cols]).groupby(level=0).agg(list)

# for each column, display report
for i, (col, invalid) in enumerate(invalids.any().items()):
    suffix = f'not OK / values missing at {rows[col]}' if invalid else 'OK'
    print(f'    Column {col} is {suffix}')

输出:

    Column A is OK
    Column B is OK
    Column C is not OK / values missing at [0, 2]
    Column D is OK

对于多字符串:

'\n'.join([f'    Column {col} is {f"not OK / values missing at {rows[col]}" if invalid else "OK"}'
           for i, (col, invalid) in enumerate(invalids.any().items())])

Python相关问答推荐

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

当值是一个integer时,在Python中使用JMESPath来验证字典中的值(例如:1)

Pandas 在时间序列中设定频率

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

Python -根据另一个数据框中的列编辑和替换数据框中的列值

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

使用mySQL的SQlalchemy过滤重叠时间段

根据条件将新值添加到下面的行或下面新创建的行中

Polars LazyFrame在收集后未返回指定的模式顺序

当多个值具有相同模式时返回空

如何制作10,000年及以后的日期时间对象?

在np数组上实现无重叠的二维滑动窗口

在极性中创建条件累积和

为一个组的每个子组绘制,

提取相关行的最快方法—pandas

使用BeautifulSoup抓取所有链接

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题

(Python/Pandas)基于列中非缺失值的子集DataFrame

仅使用预先计算的排序获取排序元素

有没有一种方法可以在朗肯代理中集成向量嵌入