Python Pandas 循环中计算中位数:解决只输出最后一个值的错误
本文将讲解在使用 Python Pandas 库处理数据时,一个常见的循环中计算中位数的错误以及解决方法。
假设我们有一个名为df的 DataFrame,其中包含不同浓度的溶液,以及对应不同频率下的测量值。我们希望计算每个浓度组所有频率下测量值的中位数,并将其存储在一个新的 DataFrame 中。
concentration_list = ['saline0.05%', 'saline0.10%', 'saline0.20%', 'saline0.30%', 'saline0.40%', 'saline0.50%']
df_saline_median = pd.DataFrame(columns=['1kHz_mag','2kHz_mag','3kHz_mag','7kHz_mag','11kHz_mag','17kHz_mag',
'23kHz_mag','31kHz_mag','43kHz_mag','61kHz_mag','89kHz_mag','127kHz_mag',
'179kHz_mag','251kHz_mag','349kHz_mag'])
for i in concentration_list:
saline_group = df[df['name'] == i]
saline_median = saline_group[['1kHz_mag','2kHz_mag','3kHz_mag','7kHz_mag','11kHz_mag','17kHz_mag',
'23kHz_mag','31kHz_mag','43kHz_mag','61kHz_mag','89kHz_mag','127kHz_mag',
'179kHz_mag','251kHz_mag','349kHz_mag']].median()
df_saline_median.loc[i] = saline_median
print(df_saline_median)
然而,运行以上代码后,我们可能会发现输出结果中只包含saline0.50%这一浓度下的中位数,其他浓度的中位数并没有被计算出来。
这是由于循环中saline_group和saline_median的赋值语句没有缩进到循环内部,导致循环只计算了最后一个saline_group的中位数,并将其赋值给了df_saline_median。
为了解决这个问题,需要将赋值语句缩进到循环中,如下所示:
concentration_list = ['saline0.05%', 'saline0.10%', 'saline0.20%', 'saline0.30%', 'saline0.40%', 'saline0.50%']
df_saline_median = pd.DataFrame(columns=['1kHz_mag','2kHz_mag','3kHz_mag','7kHz_mag','11kHz_mag','17kHz_mag',
'23kHz_mag','31kHz_mag','43kHz_mag','61kHz_mag','89kHz_mag','127kHz_mag',
'179kHz_mag','251kHz_mag','349kHz_mag'])
for i in concentration_list:
saline_group = df[df['name'] == i]
saline_median = saline_group[['1kHz_mag','2kHz_mag','3kHz_mag','7kHz_mag','11kHz_mag','17kHz_mag',
'23kHz_mag','31kHz_mag','43kHz_mag','61kHz_mag','89kHz_mag','127kHz_mag',
'179kHz_mag','251kHz_mag','349kHz_mag']].median()
df_saline_median.loc[i] = saline_median
print(df_saline_median)
通过将saline_median的赋值语句缩进到循环内,代码将在循环中依次计算每个浓度组的中位数,并将结果存储到df_saline_median中,最终输出所有浓度下的中位数。
总结来说,缩进错误是一个常见的编程错误,在使用循环语句时,一定要注意代码的缩进,确保每个代码块都位于正确的缩进级别,避免逻辑错误。
原文地址: https://www.cveoy.top/t/topic/jFR7 著作权归作者所有。请勿转载和采集!