如果条件可能存在重叠案例,请将其分开

时间:2016-11-23 02:45:28

标签: python pandas if-statement conditional-statements enumerate

给定一个pandas数据帧wb,它看起来像这样(在Excel中,在带来之前) 它与read_csv()

进入大熊猫

enter image description here

ad_tag_name 是3组。我想将 _level2 附加到每组3的每一秒,并将 _level3 附加到这一列的值在每组3的每三分之一中,所以我最终会得到类似的东西:

enter image description here

我决定使用mod除法,其逻辑是“如果它最后由2和3分开,则追加 _level3 ;如果它仅均匀地除以2,则追加 _level2 。如果它仅均匀地除以3,则追加 _level3 否则,请不要管它。“

for index, elem in enumerate(wb['ad_requests']):
    if np.mod(index+1,2) == 0 and np.mod(index+1,3) == 0:
        wb.at[index,'\xef\xbb\xbf"ad_tag_name"'] = wb.at[index,'\xef\xbb\xbf"ad_tag_name"'] + "_level3"
    elif np.mod(index+1,3) == 0:
        wb.at[index,'\xef\xbb\xbf"ad_tag_name"'] = wb.at[index,'\xef\xbb\xbf"ad_tag_name"'] + "_level3"
    elif np.mod(index+1,2) == 0:
        wb.at[index,'\xef\xbb\xbf"ad_tag_name"'] = wb.at[index,'\xef\xbb\xbf"ad_tag_name"'] + "_level2"

然而,当我保存生成的CSV并检查它时,我看到:

enter image description here

模式是:无后缀,_level2,_level3,level2,无后缀,level3,无后缀,level2,level3 然后重复。所以在9个案例中有8个是正确的,但实际上这是一个意外。我不喜欢我已经定义的if s / elif之间可能存在一些重叠的事实,我确信这是一个有缺陷的逻辑,它是问题的根源。

我们如何重新编写条件,以便他们正确地实现我的逻辑?

Python:2.7.10 熊猫:0.18.0

1 个答案:

答案 0 :(得分:0)

虽然大熊猫可以提供一些优雅的快捷方式,但它也可以导致一个试验错误的兔子洞。

有时候回到基础,到Python内置的内容,是可行的方法。

for i in range(len(wb))[2::3]:
    wb.at[i,'\xef\xbb\xbf"ad_tag_name"'] = wb.at[i,'\xef\xbb\xbf"ad_tag_name"'] + "_level3"
for i in range(len(wb))[1::3]:
    wb.at[i,'\xef\xbb\xbf"ad_tag_name"'] = wb.at[i,'\xef\xbb\xbf"ad_tag_name"'] + "_level2"