我有一些列是浮点数的数据,我想将它们按四舍五入为的整数进行聚合.在下面的MWE中,预期yields 应为
912
0 2.5
1 1.5
因为所有列元素都四舍五入为912
.
MWe:
import pandas as pd
temp = pd.DataFrame({911.7: {0: 0, 1: 1}, 911.9: {0: 2.0, 1: 0.0}, 912.0: {0: 0.5, 1: 0.5}})
round_to = 1
price_digits=1
rounded = [round(round(x / round_to) * round_to, price_digits) for x in temp.columns]
temp.groupby(by=rounded, axis=1).sum()
当实际运行时,traceback将是:
Traceback (most recent call last):
File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3331, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-17-983fbc3f7113>", line 1, in <module>
temp.groupby(by=rounded, axis=1).sum()
File "D:\Anaconda3\lib\site-packages\pandas\core\groupby\groupby.py", line 1378, in f
return self._cython_agg_general(alias, alt=npfunc, **kwargs)
File "D:\Anaconda3\lib\site-packages\pandas\core\groupby\generic.py", line 1004, in _cython_agg_general
how, alt=alt, numeric_only=numeric_only, min_count=min_count
File "D:\Anaconda3\lib\site-packages\pandas\core\groupby\generic.py", line 1033, in _cython_agg_blocks
block.values, how, axis=1, min_count=min_count
File "D:\Anaconda3\lib\site-packages\pandas\core\groupby\ops.py", line 587, in aggregate
"aggregate", values, how, axis, min_count=min_count
File "D:\Anaconda3\lib\site-packages\pandas\core\groupby\ops.py", line 530, in _cython_operation
result, counts, values, codes, func, is_datetimelike, min_count
File "D:\Anaconda3\lib\site-packages\pandas\core\groupby\ops.py", line 608, in _aggregate
agg_func(result, counts, values, comp_ids, min_count)
File "pandas\_libs\groupby.pyx", line 464, in pandas._libs.groupby._group_add
ValueError: len(index) != len(labels)
这很令人费解,因为len(rounded)==len(temp.columns)==3
.似乎没有长度不匹配的情况.
怎样才是达到我的目的的合适方式?提前谢谢!
Pandas 版:'1.0.1'
.Python版本:Python 3.7.6 (default, Jan 8 2020, 16:21:45) [MSC v.1916 32 bit (Intel)]
.
在大多数情况下,MWE确实有效.例如,当我们将第三个Column元素从912.0
更改为912.3
时:
import pandas as pd
round_to = 1
price_digits=1
temp = pd.DataFrame({911.7: {0: 0, 1: 1}, 911.9: {0: 2.0, 1: 0.0}, 912.3: {0: 0.5, 1: 0.5}})
rounded = [round(round(x / round_to) * round_to, price_digits) for x in temp.columns]
temp.groupby(by=rounded, axis=1).sum()
输出将为
Out[14]:
912
0 2.5
1 1.5