首页 > 解决方案 > 除新列外,所有列向上舍入

问题描述

我想将此列添加到已经存在的数据框中。

df['THRESHOLD'] = df['AVG_CNT'] * 3
cols = ['AVG_CNT', 'STD_DEV', 'THRESHOLD']
df[cols] = df[cols].round(1)
print (df)

我想将列四舍五入为一个有效数字。除新列外,所有列都被四舍五入df['THRESHOLD']。为什么会这样?

df.info() 的结果

<class 'pandas.core.frame.DataFrame'>
Int64Index: 16 entries, 0 to 15
Data columns (total 4 columns):
AVG_CNT      16 non-null float64
ID           16 non-null int64
STD_DEV      16 non-null float64
THRESHOLD    16 non-null float64
dtypes: float64(3), int64(1)
memory usage: 640.0 bytes
None

标签: pythonpandasdataframe

解决方案


您可以使用它round来执行此操作。

你可以通过几种方式做到这一点。

df = df.round({'AVG_CNT': 1, 'STD_DEV': 1, 'THRESHOLD': 1})

或者像你一样:

cols = ['AVG_CNT', 'STD_DEV', 'THRESHOLD']
df[cols] = df[cols].round(1)

或者

df[['AVG_CNT', 'STD_DEV', 'THRESHOLD']] = df[['AVG_CNT', 'STD_DEV', 'THRESHOLD']].round(1)

或使用applySeries.round

df[['AVG_CNT', 'STD_DEV', 'THRESHOLD']] = df[['AVG_CNT', 'STD_DEV', 'THRESHOLD']].apply(lambda x: pd.Series.round(x, 1))

或者

df[cols] = df[cols].apply(lambda x: pd.Series.round(x, 1))

推荐阅读