繁体   English   中英

熊猫在一列中检查条件,在另一列中填充数据

[英]pandas check condition in one column and populate data in another

我有一个数据框如下:

        State       Time           
        Approved    15 hours    
        Approved    NaT      
        Rejected    NaT

我想要某种逻辑来检查状态列中的值。 如果值是“已拒绝”,而时间值是“ NaT”,则在新列中将其替换为N / A。 如果该值为“已批准”且“时间”值为“ NaT”,则在新列中将其替换为“错误”。

最终结果应如下所示:

        State   Time           Final
        Approved    15 hours    15 hours
        Approved    NaT        error
        Rejected    NaT         N/A

简而言之,我希望能够在数据框中的各种数据列上运行比较(if / else / switch之类的东西),并在同一数据框中的列中填充值。

当您需要应用多个条件时,请使用np.select()

m1 = (df['State'] == 'Rejected') & (df['Time'] == 'NaT')
m2 = (df['State'] == 'Approved') & (df['Time'] == 'NaT')

df['final'] = np.select(condlist=[m1,m2],
                        choicelist=['N/A','error'],
                        default=df['Time'])
print(df)
 State          Time     final
0  Approved  15 hours  15 hours
1  Approved       NaT     error
2  Rejected       NaT       N/A

您可以利用numpy.where()来将值编码为您描述的列。 下面的示例使用嵌套的If then..语句

import pandas as pd
import numpy as np

data = {'State' : ['Approved','Approved','Rejected'],
        'Time' : ['15 hours','NaT','NaT'] }

df = pd.DataFrame.from_dict(data)
df['Final'] = np.where((df['State'] == 'Rejected') & (df['Time'] == 'NaT'), 'N/A',
                  np.where((df['State'] == 'Approved') & (df['Time'] == 'NaT'), 'error',df['Time']))

df

输出:

State      Time     Final
Approved   15 hours 15 hours
Approved   NaT      error
Rejected   NaT      N/A

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM