【发布时间】:2018-09-25 17:37:48
【问题描述】:
根据'n'列中的值复制行,并用平均值(v除以n)重新分配'v'列中的值,如下所示:
我正在关注Replicating rows in a pandas data frame by a column value 的示例。
import pandas as pd
import numpy as np
df = pd.DataFrame(data={
'id': ['A', 'B', 'C'],
'n' : [1, 2, 3],
'v' : [ 10, 13, 8]
})
df2 = df.loc[np.repeat(df.index.values,df.n)]
#pd.__version__ 0.20.3
#np.__version__ 1.15.0
但它返回了一条错误消息:
Traceback (most recent call last):
File "C:\Python27\Working Scripts\pv.py", line 14, in <module>
df2 = df.loc[np.repeat(df.index.values, df.n)]
File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 445, in repeat
return _wrapfunc(a, 'repeat', repeats, axis=axis)
File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 61, in _wrapfunc
return _wrapit(obj, method, *args, **kwds)
File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 41, in _wrapit
result = getattr(asarray(obj), method)(*args, **kwds)
TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe'
这里出了什么问题,我该如何纠正?谢谢你。 (其他一些 pandas 和 numpy 脚本在计算机上都可以正常工作。)
【问题讨论】:
-
我无法复制,它可以在我的机器上运行。我有 pandas 0.23.4,试试升级吧?
-
它也适用于我。试试
df.reindex(df.index.repeat(df.n))? -
@IMCoins,谢谢。我将 pandas 升级到 0.23.4,将 numpy 升级到 1.15.2,但还是一样。
-
@Abhi,升级了 Pandas 和 Numpy,还是一样...
-
这些对我来说都是在黑暗中拍摄的,因为我无法复制。试试
df.index.values.astype('int32')?
标签: python pandas numpy dataframe