小编Zar*_*chi的帖子

熊猫 if else 条件在多列上

假设我有以下 df:

import pandas as pd

data_dic = {
    "a": [0,0,1,2],
    "b": [0,3,4,5],
    "c": [6,7,8,9]
}
df = pd.DataFrame(data_dic)
Run Code Online (Sandbox Code Playgroud)

结果:

   a  b  c
0  0  0  6
1  0  3  7
2  1  4  8
3  2  5  9
Run Code Online (Sandbox Code Playgroud)

我需要根据条件将值从上述列传递到新列:

if df.a > 0 then value df.a
else if df.b > 0 then value df.b 
else value df.c
Run Code Online (Sandbox Code Playgroud)

现在我尝试:

df['value'] = [x if x > 0 else 'ww' for x in df['a']]
Run Code Online (Sandbox Code Playgroud)

但不知道如何在此输入更多条件。

预期结果:

   a  b  c value
0  0 …
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
2
解决办法
2万
查看次数

Selenium Firefox headless 返回不同的结果

当我抓取包含使用无头选项的产品的页面时,我得到不同的结果。
对于同一问题,一次我得到的结果未排序,另一次得到正确排序的结果。

硒火狐浏览器:

firefox_options = Options()
firefox_options.headless = True
browser = webdriver.Firefox(options=firefox_options, executable_path=firefox_driver)
Run Code Online (Sandbox Code Playgroud)

根据这篇文章:
“当使用无头选项时,Firefox 不会发送不同的标头”。

如何使用无头选项从抓取中获得恒定的结果?

更新:

事实证明,广告弹出窗口隐藏了价格排序菜单。通过设置DebanjanB发布的恒定窗口大小,问题得到了解决。

感谢您的任何建议

python selenium headless-browser geckodriver firefox-headless

5
推荐指数
1
解决办法
6755
查看次数

pandas 合并 df 多对多且不重复

假设我有两个如下所示的 df,在列“a”和“b”上具有相同的键值:

df1

   a  b  c
0  0  3  6
1  0  3  7
2  1  4  8
3  2  5  9
Run Code Online (Sandbox Code Playgroud)

df2

   a  b   d
0  0  3  10
1  0  3  10
2  1  4  12
3  2  5  13
Run Code Online (Sandbox Code Playgroud)

如何合并它们而不重复?

合并 df 然后删除重复项的选项并不令人满意

我尝试使用下面的代码来做到这一点,但这会创建重复的行并显着增加文件容量。

df = pd.merge(df1, df2, on=['a', 'b'], how='left', validate='many_to_many')
df = pd.merge(df1, df2, on=['a', 'b'], how='inner')
Run Code Online (Sandbox Code Playgroud)

预期结果:

   a  b  c   d
0  0  3  6  10
1  0  3  7  10
2  1  4 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

2
推荐指数
1
解决办法
3236
查看次数