【发布时间】:2022-06-11 03:35:50
【问题描述】:
给定以下数据框:
df = pd.DataFrame(zip(*[np.random.randint(10, 25, size=100),
np.random.randint(10, 25, size=100),
np.random.randint(10, 25, size=100),
np.random.randint(10, 25, size=100)]),
columns=list('ABCD'))
我需要一种最有效(更快)的方式来执行以下操作:
dd = df.to_dict(orient='index')
for k,v in dd.items():
v['test'] = len([z['A'] for y,z in dd.items()
if v['A'] > z['A']+3
if v['B'] < z['B']/2])
pd.DataFrame.from_dict(dd,orient='index')
此代码有效,但在处理具有 >100k 行的 df 时需要很长时间。 有没有更快的方法来达到同样的效果?
【问题讨论】:
-
您能用文字解释一下您要做什么吗?查看代码,您实际上是在进行笛卡尔比较,因此您将针对 100k 行,循环 10,000,000,000(100 亿)次...
-
对于此数据框中的每条记录,我想知道有多少记录符合上述条件。因此对于第 1 行,数据框中有多少条记录具有上述条件,以此类推。
-
你想使用
df.apply()。如果你用英语提供你的条件逻辑,那么帮助会更容易 -
是的,请提供预期的输出,因为我“不明白”运行您的代码后得到的结果背后的逻辑。
-
对于第一条记录,如果'test'列等于10,则意味着在整个数据框中有10条记录: - 其A值+ 3低于A值first记录 - 并且它们的 B 值 /2 大于第一条记录的 B 值
标签: python pandas dataframe dictionary aggregate