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

Overwrite field values based on membership in a set

在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)

以下是带有示例的数据样本:

列表 1 输出[345]: 发票编号发票类型 0 1341262 None 1 1037970 None 2 1037941 None 3 1805305 None 4 3302259 None 5 1037388 None

列表 2 输出[347]: 销售发票编号 0 1341250 1 3302261 2 1341271 3 1037388 4 134127

由于 1037388 在两个列表中,list1['Invoice Type'] 需要等于 'Equipment.'

好的,我假设你的框架实际上是这样的(另外,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

然后将'Equipment'分配给重叠:

 a.loc[idxs, 'Invoice Type'] = 'Equipment'