【发布时间】:2021-08-23 06:17:27
【问题描述】:
我正在创建一个新的计算 pandas 列,但是,我想排除某些行,并计算新列的值。然后填充排除行的值,我想通过df1.groupby['City'] 对数据帧进行子集化,并计算平均值以应用回原始数据帧中的new col。
df1 = pd.DataFrame({
'City': ['SF','NYC','SF','NYC','SF','CHI','LA','LA','CHI'],
'Val': [2,4,0,0,7,4,3,5,6],
'Val1': [1,1,1,1,1,1,1,1,1]
})
df1['new col'] = np.nan
for name, group in df.groupby(['City']):
# Create Boolean Index
m = group['Val'] != 0
# Calculate rev_per_unit from grouped dataframe `group`
stat = group.loc[m, 'Val'] / group.loc[m, 'Val1']
# Assign stat to `df` at index locations where `Val` is 0 in group
df.loc[group[~m].index, ''] = group['new col'].mean()
预期输出:
df1 = pd.DataFrame({
'City': ['SF','NYC','SF','NYC','SF','CHI','LA','LA','CHI'],
'Val': [2,4,0,0,7,4,3,5,6],
'Val1': [1,1,1,1,1,1,1,1,1],
'new_col: [2,4,4.5,2,7,4,3,5,6]
})
新列是df1['Val] / df1['Val1'] 的计算列,不包括df['Val'] == 0,然后我将new_col 估算为df['Val'] == 0 作为分组均值的行。
【问题讨论】:
-
预期输出是什么?你的意思是
df.loc[group[~m].index, ''] = stat.mean()? -
new_col将是该组的平均值,计算后不包括。df['Val']中的 0。 @HenryEcker 用预期的输出更新了问题。 -
基本上,缺失值是
new_col中每个组的值的平均值。