![](/img/trans.png)
[英]Pandas pd.apply function work with python caches cannot be hashed"
[英]Python Data Manipulation - pd.apply
我在尝试从现有列创建新列时遇到问题。 我发现 the.apply 有效,但速度非常慢。 不幸的是,我公司没有人熟悉 Python。 有没有更有效的方法来执行以下操作?
数据集非常大 - 35 列,10M+ 行。
def state_grpd(x, y, z):
if x in ["A3",]:
if y in ["FL", "MI", "NJ", "TX",]:
result = y
else:
result = "Other"
else:
if z in ["FL", "MI", "NJ", "TX",]:
result = z
else:
result = "Other"
return result
df["STATE_BANDED"] = df.apply(
lambda x: state_grpd(x["TYPE"], x["STATE1"], x["STATE2"]), axis=1)
pandarallel 可能会解决您的问题。 它使 pandas function 在多核而不是单核中完成工作**(并行化任务)**。
通读这个 -
您可以创建一个单独的表并加入它。 我不确定 join 是否比 apply 方法快。 我听说矢量化function 也有帮助。
我认为这应该对你有用。
import swifter
df["STATE_BANDED"] = df.swifter.apply(
lambda x: state_grpd(x["TYPE"], x["STATE1"], x["STATE2"]), axis=1)
试试这个。 它可能会快一点。
import pandas as pd
data = {'type': ['A3', 'A3', 'A3', 'A3', 'A1', 'A1', 'A1', 'A1', 'A2', 'A2'],
'state1': ['FL', 'MI', 'NJ', 'TX', 'CT', 'MA', 'NH', 'FL', 'CA', 'OR'],
'state2': ['NY', 'MS', 'NH', 'CT', 'FL', 'MI', 'NJ', 'TX', 'CA', 'OR']
}
df = pd.DataFrame(data)
df['state_banned'] = 'Other'
mask = (df['type'] == 'A3') & (df['state1'].isin(['FL', 'MI', 'NJ', 'TX']))
df['state_banned'][mask] = df['state1'][mask]
mask = (df['type'] != 'A3') & (df['state2'].isin(['FL', 'MI', 'NJ', 'TX']))
df['state_banned'][mask] = df['state2'][mask]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.