给定一个pandas数据帧wb
,它看起来像这样(在Excel中,在带来之前)
它与read_csv()
:
列 ad_tag_name 是3组。我想将 _level2 附加到每组3的每一秒,并将 _level3 附加到这一列的值在每组3的每三分之一中,所以我最终会得到类似的东西:
我决定使用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并检查它时,我看到:
模式是:无后缀,_level2,_level3,level2,无后缀,level3,无后缀,level2,level3 然后重复。所以在9个案例中有8个是正确的,但实际上这是一个意外。我不喜欢我已经定义的if
s / elif
之间可能存在一些重叠的事实,我确信这是一个有缺陷的逻辑,它是问题的根源。
我们如何重新编写条件,以便他们正确地实现我的逻辑?
Python:2.7.10 熊猫:0.18.0
答案 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"