假设我有一个带有两列的pandas DataFrame:salary和food_perc(您在食品上花费的薪水百分比)。每行对应一个不同的人。
import pandas as pd
import numpy as np
# Set seed
np.random.seed(1)
# Create dataframe
df = pd.DataFrame({'salary': np.round(np.random.uniform(10000, 100000, 100), 2),
'food_perc': np.round(np.random.uniform(0.1, 0.9, 100), 2)})
Run Code Online (Sandbox Code Playgroud)
我想要一个新的列,称为food_compare每个人在哪里,我要看看他们food_perc与收入相似(+/- 10%)的人的比较。
由于每个人的+/- 10%同类群组会有所不同,因此,我看不出一种方法来避免遍历每一行并每次都创建同类群组,如下所示。
for i in df.index:
# Isolate the cohort
df_sub = df[(df.loc[:, 'salary'] * 0.9 < df.loc[i, 'salary']) &
(df.loc[:, 'salary'] * 1.1 > df.loc[i, 'salary'])]
# Make the comparison
df.loc[i, 'food_compare'] = np.divide(df.loc[i, 'food_perc'],
np.mean(df_sub['food_perc']))
Run Code Online (Sandbox Code Playgroud)
每次迭代都为数据帧设置子集实际上不是可扩展的解决方案。不幸的是,我无法针对正在解决的问题抢先创建静态垃圾箱(例如,$ 10,000- $ …