我正在尝试将一行中的多个值替换为一个值。在下面的输出中,如果任何一行至少有一个'YES',则应将其替换为'YES',并且如果一行中的所有值均为'NO' '然后应将其替换为'否'。
bcc_new.DOCUMENT_SUBMITTED.value_counts()
Output:
NO, YES, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO 212036
NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO 29549
NO, NO, NO, NO, YES, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO 26975
NO, NO, NO, NO, NO, NO, YES, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO 23588
NO, NO, NO, YES, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO 4643
NO, YES, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, YES, NO, NO, NO, NO, NO 2580
NO, YES, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, YES, NO, NO, NO 1826
NO, NO, NO, NO, NO, NO, NO, NO, NO, YES, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO 1151
NO, NO, NO, NO, NO, NO, NO, YES, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO 1141
NO, YES, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, YES, NO, NO, NO, NO, NO, NO, NO 648
Expected output:
YES 212036
NO 29549
YES 26975
YES 23588
我尝试了此查询,但它不起作用。需要帮助!
bcc_new.loc[bcc_new['DOCUMENT_SUBMITTED'].isin(['YES']).any()]='YES'
bcc_new.loc[bcc_new['DOCUMENT_SUBMITTED'].isin(['NO']).all()]='NO'
答案 0 :(得分:1)
您的bcc_new['DOCUMENT_SUBMITTED']
可能是对象列,因此您可以先执行以下操作:
o = bcc_new['DOCUMENT_SUBMITTED']
is_yes = (o.str.split(',\s+', expand=True) == 'YES').any(axis=1)
is_yes.value_counts()
这将为您提供以True和False为键的值,但是您可以在之后将它们映射为Yes和No
如果您想将值映射为“是”或“否”,您可以这样做:
counts = is_yes.value_counts()
counts.index = counts.index.map({True: 'YES', False: 'NO'})