如何在一列中找到这两个数字之间的平均值?

2024-10-02 18:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在1列中找到这2个数字之间的平均值,并用平均值更新列built_up?并忽略不在范围内的数字

  built_up
0 1498-1602
1 1022-1187
2 1713-1970
3 2305-3396
4 1420
5 -

这是我的数据-https://gist.github.com/datomnurdin/21b028b8ed213aacbe4ba4b71ccfe384

我已经用这个删除了Fromsq. ft.

df['built_up'] = df['built_up'].map(lambda x: x.lstrip('From ').rstrip(' sq. ft.'))

Tags: 数据fromhttpsgithubcommapdfsq
2条回答

编辑:对于实际数据,应使用str.findall,如下所示

df['b_median'] = [np.median(pd.to_numeric(x if bool(x) else np.nan, errors='coerce')) 
                         for x in df['built_up'].str.findall('\d+')]

原件

您的实际数据有一些不平衡的字符串,请在使用np.medianpd.to_numeric调用map之前尝试strip

s = (df['built_up'].map(lambda x: 
                        np.median(pd.to_numeric(x.strip('- ').split('-'), errors='coerce'))))

Out[356]:
0    1550.0
1    1104.5
2    1841.5
3    2850.5
4    1420.0
5       NaN
Name: built_up, dtype: float64

方法2:在处理单元格中的字符串时,列表理解速度更快

df['b_median'] = [np.mean(pd.to_numeric(x.strip('- ').split('-'), errors='coerce')) 
                       for x in df.built_up]

Out[354]:
    built_up  b_median
0  1498-1602    1550.0
1  1022-1187    1104.5
2  1713-1970    1841.5
3  2305-3396    2850.5
4       1420    1420.0
5          -       NaN

如果只有两个值,则可以使用mean

df['built_up'].str.split('-', expand=True).apply(pd.to_numeric, errors='coerce').mean(axis=1)

输出:

0    1550.0
1    1104.5
2    1841.5
3    2850.5
4    1420.0
5       NaN
dtype: float64

相关问题 更多 >