我正在尝试修复csv文件
需要根据几个条件删除一些数据行
假设您有以下数据框:
-A ---- -----乙Ç
000 --- 0 ----- 0
000 --- 1个----- 0
001 --- 0 ----- 1
011 --- 1个----- 0
001 --- 1 ----- 1
如果两行或更多行具有共同的列A,我希望将列B设置为1的行保留 生成的数据框应如下所示:
-A ---- -----乙Ç
000 --- 1个----- 0
011 --- 1个----- 0
001 --- 1 ----- 1
我已经尝试过merge和drop_duplicates,但似乎无法获得我需要的结果。不确定列B = 1的行是否在B = 0的行之后.drop_duplicates的take_last参数看起来很有吸引力,但我不认为它适用于此。
任何建议都将不胜感激。
谢谢。
答案 0 :(得分:0)
不是直截了当,但这应该有效
DF = pd.DataFrame({'A' : [0,0,1,11,1], 'B' : [0,1,0,1,1], 'C' : [0,0,1,0,1]})
DF.ix[DF.groupby('A').apply(lambda df: df[df.B == 1].index[0] if len(df) > 1 else df.index[0])]
A B C
1 0 1 0
4 1 1 1
3 11 1 0
注意:
答案 1 :(得分:0)
能够在熊猫周围编织以获得我想要的结果。 这不是很漂亮,但它完成了工作
res = DataFrame(columns=('CARD_NO', 'STATUS'))
for i in grouped.groups:
if len(grouped.groups[i]) > 1:
card_no = i
print card_no
for a in grouped.groups[card_no]:
status = df.iloc[a]['STATUS']
print 'iloc:'+str(a) +'\t'+'status:'+str(status)
if status == 1:
print 'yes'
row = pd.DataFrame([dict(CARD_NO=card_no, STATUS=status), ])
res = res.append(row, ignore_index=True)
else:
print 'no'
else:
#only 1 record found
#could be a status of 0 or 1
#add to dataframe
print 'UNIQUE RECORD'
card_no = i
print card_no
status = df.iloc[grouped.groups[card_no][0]]['STATUS']
print grouped.groups[card_no][0]
#print status
print 'iloc:'+str(grouped.groups[card_no][0]) +'\t'+'status:'+str(status)
row = pd.DataFrame([dict(CARD_NO=card_no, STATUS=status), ])
res = res.append(row, ignore_index=True)
print res