我正在尝试用 1 列值和 1 列精度对 DataFrame 进行舍入。>>> df = pd.DataFrame({'value': [1.111, 2.222, 3.333, 4.444], 'precision': [1,2,2,1]})>>> df precision value0 1 1.1111 2 2.2222 2 3.3333 1 4.444要创建rounded这样的列:>>> df precision value rounded0 1 1.111 1.11 2 2.222 2.222 2 3.333 3.333 1 4.444 4.4我尝试了直观的解决方案:>>> df['rounded'] = round(df['value'], df['precision'])Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/Drew/Library/Python/2.7/lib/python/site-packages/pandas/core/series.py", line 93, in wrapper "{0}".format(str(converter)))TypeError: cannot convert the series to <type 'float'>和>>> df['rounded'] = df['value'].round(df['precision'])Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/Drew/Library/Python/2.7/lib/python/site-packages/pandas/core/series.py", line 1999, in round result = com.values_from_object(self).round(decimals) File "/Users/Drew/Library/Python/2.7/lib/python/site-packages/pandas/core/series.py", line 93, in wrapper "{0}".format(str(converter)))TypeError: cannot convert the series to <type 'int'>有没有办法在不遍历每一行的情况下做到这一点?
2 回答

慕无忌1623718
TA贡献1744条经验 获得超4个赞
In [45]: df.apply(lambda x: round(x["value"], int(x["precision"])), axis=1)
Out[45]:
0 1.10
1 2.22
2 3.33
3 4.40

拉丁的传说
TA贡献1789条经验 获得超8个赞
使用列表理解将变量传递给np.round
df = pd.DataFrame({'value': [1.111, 2.222, 3.333, 4.444], 'precision': [1,2,3,1]})
print(df)
value precision
0 1.111 1
1 2.222 2
2 3.333 3
3 4.444 1
df['rounded'] = [np.around(x,y) for x,y in zip(df['value'],df['precision'])]
print(df)
value precision rounded
0 1.111 1 1.100
1 2.222 2 2.220
2 3.333 3 3.333
3 4.444 1 4.400
添加回答
举报
0/150
提交
取消