python - 使用一个df列过滤另一个df,多个过滤器
问题描述
我想根据 df2 的 Version 列中的值过滤 df1,然后将 df1 中的 Cost Total 更改为 0。我想更改 df2 中那些版本的成本。
df1 是 [24867 行 x 63 列]
df2 是 [35 行 x 7 列]
我用于过滤和设置值的代码是:
df1.loc[
(df1['Group'] == "CBSS_cq_....JZJN") &
(df1['Version – USE'] == df2['Version - USE']),
df1['Cost Total']] = 0
该代码将所有“组”的总成本分配为 0,它没有过滤我的第二个版本条件。给出错误:
raise ValueError("Can only compare the same-labeled Series objects")
ValueError: Can only compare the same-labeled Series objects
请注意,当我使用时.values
:
df1.loc[
(df1['Group'] == "CBSS_.......KJZJN") &
(df1['Version – USE'].values == df2['Version'].values),
df1['Cost Total']] = 0
给我以下错误:
block_values = np.empty(block_shape, dtype=dtype)
ValueError: array is too big;arr.size * arr.dtype.itemsize
大于最大可能大小。
**********以上以.isin排序 *************
我的 df2 是 24 个 excel 文件的模板文件,每个文件有 3-4 张。我已经浏览了所有文件及其工作表。
索引模板文件被命名为 -
AdDape CBS 索引模板 6.3.xlsx
AdDape 中年索引模板 5.3.xlsx
如下所示:
print("\nIndex Template Files\n")
os.chdir('path to my \IndexTemplatefiles')
FileList = glob.glob('*.xlsx')
print(FileList)
for fname in FileList:
excel = pd.ExcelFile(fname)
sheets = pd.ExcelFile(fname).sheet_names # list of sheets
print(fname)
for sheet in excel.sheet_names:
df2 = pd.read_excel(excel, sheet_name=sheet)
df3 = pd.read_excel(CostGroupFile, sheet_name='Sheet2')
#merging df1 and df2
df1 = pd.merge(df1, df2, left_on='Version', right_on='Version Market - USE', how='left')
df1.loc[(
(df1['Cost Group'] == "CBSS_ron_rt_na_disp_JZJN") &
(df1['Version'].isin(df2['Version Market - USE'])),
'Cost Total')] = (df1['Market Spend'] / df1['Sum of Impressions']) * df1['Impressions']
#deleting extra columns
df1 = df1.drop(columns=['..all columns that came after merging'])
df1.to_excel(writer, index=False)
writer.save()
此代码正在工作并更新成本总值,但您可以看到我手动输入的成本组,我希望它是动态的。
如果 excel 文件(索引模板文件)名称类似于 df3[filename] 并且其工作表的名称,即 df2 的工作表名类似于 df3[Sheetname],则使用相应的成本组并在过滤器部分中使用来过滤 df1 和更新总成本。
解决方案
你有你的数据的例子吗?
我不确定这是否是你想要的......虽然你可以试试这个
df1.loc[df1['Version – USE'].isin(df2['Version - USE']), 'Cost Total'] = 0
推荐阅读
- solr - 我可以根据重复字段查找文档吗?
- mongodb - 如何在mongodb查询中编写SELECT FROM testing WHERE int_col + int_col2 > 123?
- git - 删除所有不再在 Github 上的分支
- java - Appium XCUITest iOSDriver sendkeys()不起作用
- python - 防止表单文本字段中的 HTML 转义?
- php - 激活状态按钮前后的检查按钮
- r - 为什么 R 的 print 中的 'digits' 参数会改变一个值?
- android - 可以在一个 Android 应用中使用两个不同的 Firebase 项目,特别是崩溃分析、消息传递和性能扩展
- linux - 如何在 GNURadio Companion (Ubuntu) 上安装 NI USRP 2921?
- rust - 如何借用对本身位于选项内的 RefCell 内的东西的引用?