根据集合中的成员资格覆盖字段值

时间:2015-01-20 17:05:35

标签: python if-statement pandas sqlite case-when

在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 ['发票类型']需要等同于设备。'

1 个答案:

答案 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'