在Pandas Dataframe中,如果df [' field1']是字段df2 [' field2']的成员,那么我需要覆盖第三个字段的值df具有指定值的[field3]。
我已尝试在sqlite3中使用CASE:
conn=sqlite3.connect(':memory:')
sql.write_frame(equip,name='equip',con=conn)
sql.write_frame(list1,name='list1',con=conn)
list2=sql.read_frame("SELECT CASE WHEN (a.'Invoice Number' IN (SELECT b.'Sold On Invoice Number' FROM equip b) THEN a.'Type'='blah' FROM list1 as a END",conn)
以下是带有示例的数据样本:
list1的 出[345]: 发票编号发票类型 0 1341262无 1 1037970无 2 1037941无 3 1805305无 4 3302259没有 5 1037388无
list2中 出[347]: 在发票号码上出售 0 1341250 1 3302261 2 1341271 3 1037388 4 134127
由于1037388在两个列表中,因此list1 ['发票类型']需要等同于设备。'
答案 0 :(得分:0)
好的,我假设你的帧实际上看起来像这样(here's如何制作数据帧):
a = pd.DataFrame({'Invoice Number':[1341262, 10327970, 1037941, 1805305, 3302259, 1037388], 'Invoice Type':[None]*6})
b = pd.DataFrame({'Sold On Invoice Number':[1341250, 3302261, 1341271, 1037388, 134127]})
要获得重叠的索引,请使用.isin执行boolean slice,如下所示:
idxs = a[a['Invoice Number'].isin(b['Sold On Invoice Number'])].index
然后分配'设备'到重叠:
a.loc[idxs, 'Invoice Type'] = 'Equipment'