首页 > 解决方案 > python pandas中的迭代和条件

问题描述

shipportMD=pd.read_csv('shipportMD.csv')

for importName in shipportMD['importName'].unique():
    if (len(shipportMD['ItemDecision']=='Accepted')>len(shipportMD['ItemDecision']=='Rejected')):
        print (shipportMD['importName'])

我需要打印importName'Accepted'多于'Rejected'for的值ItemDecision

因此,例如:

进口名称:x,y,x,x

项目决定:拒绝、接受、拒绝、接受。

x2 个被拒绝,1 个被接受。

标签: pythonpython-3.xpandasdataframeconditional-statements

解决方案


您可以使用pd.crosstab,然后使用布尔掩码:

df = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2, 2, 2],
                   'Decision': ['Accepted', 'Rejected', 'Rejected', 'Rejected',
                                'Accepted', 'Accepted', 'Rejected', 'Accepted']})

df_ct = pd.crosstab(df['ID'], df['Decision'])

condition = df_ct['Accepted'] > df_ct['Rejected']

res = df_ct[condition].index  
# Int64Index([2], dtype='int64', name='ID')

或者对交叉表结果执行您选择的计算:

print(df_ct)

Decision  Accepted  Rejected
ID                          
1                1         3
2                3         1

推荐阅读