【问题标题】:Pandas - vectorization with if statementsPandas - 使用 if 语句进行向量化
【发布时间】:2021-07-08 07:10:59
【问题描述】:

我有这样的代码:

#read data source into dataframe
adjustments_list = pd.read_csv('./first_case.csv', encoding = "UTF-16", sep = '\t', parse_dates = ['Date'])

#match F/R and M/X meeting appropriate conditions
#represented by list of sets with two values - each value is id of adjustment, each set is relation
relation_list = []

def func_inner(outer, inner):
    if outer['ASIN'] == inner['ASIN']:
            if outer['reason_code'] == 'F' or outer['reason_code'] == 'R':
                if (inner['reason_code'] == 'M' or inner['reason_code'] == 'X') and (inner['Date'] - timedelta(days = 3)) <= outer['Date'] <= inner['Date']:
                    relation_list.append([outer.name, inner.name])
            if outer['reason_code'] == 'M' or outer['reason_code'] == 'X':
                if (inner['reason_code'] == 'F' or inner['reason_code'] == 'R') and inner['Date'] <= outer['Date'] <= (inner['Date'] + timedelta(days = 3)):
                    relation_list.append([outer.name, inner.name])

def func(x):
    adjustments_list.apply(lambda row: func_inner(outer = x, inner = row), axis = 1)


adjustments_list.apply(lambda row: func(row), axis = 1)

如何切换我的方法以便不使用apply() 函数,而是使用矢量化?

我尝试使用此资源:Link,但我不知道如何在我的具体情况下实现它。

【问题讨论】:

    标签: python pandas dataframe data-science


    【解决方案1】:

    据我了解,矢量化仅适用于数值运算。如果你想加速你的代码,如果你使用 Mac 或 Linux,你可以使用 pandarallel。如果你在 Windows 上,你可以从 WSL 调用 python https://github.com/nalepae/pandarallel

    我不知道 Windows 上有一个用于 pandas 并行性的天真的好工具。其他人可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      相关资源
      最近更新 更多