【发布时间】:2015-08-06 12:43:37
【问题描述】:
我正在应用一些处理,例如将矩阵元素从一个矩阵索引值替换为另一个。它工作正常。
ds1 = [[ 4, 13, 6, 9],
[ 7, 12, 5, 7],
[ 7, 0, 4, 22],
[ 9, 8, 12, 0]]
ds2 = [[ 4, 1],
[ 5, 3],
[ 6, 1],
[ 7, 2],
[ 4, 1 ],
[ 8, 2],
[ 9, 3],
[12, 1],
[13, 2],
[22, 3]]
ds1= pd.DataFrame(ds1)
ds2= pd.DataFrame(ds2)
#Processing ds1 by replacing
print type(ds2)
ds2 = ds2.groupby(0).mean() #.........X
print type(ds2)
C = np.where(ds1.values.ravel()[:, None] == ds2.values[:, 0])
ds1_new = ds1.values.ravel()
ds1_new[C[0]]=ds2.values[C[1], 1] #when I comment line x, it works.Otherwise getting error on this line
ds1_new = ds1_new.reshape(4,4)
使用ds2 = ds2.groupby(0).mean() 的原因是获取相似元素的平均值。当我取消注释时,它可以正常工作。
版本
Python 2.7.3
numpy - 1.9.2
pandas - 0.15.2
编辑
我的主要目标是将索引值从ds2 匹配到ds1 并将其替换为相应的值,所以输出看起来像
ds1_new = [[ 1, 2, 1, 3],
[ 2, 1, 3, 2],
[ 2, 0, 1, 3],
[ 3, 2, 1, 0]]
【问题讨论】:
-
运行你的代码没有错误
-
@EdChum:我更新了我的版本,会不会是版本的原因?
-
这不是旧版本,基本上你是分配给一个命名引用,所以 groupby 做什么都没有关系,它不会引发错误
-
@EdChum:错误不在该行,如果我取消注释
ds2 = ds2.groupby(0).mean(),则会出现错误ds1_new[C[0]]=ds2.values[C[1], 1] -
我指的是原始编辑,其中 groupby 是一个错误,运行整个代码时出现错误,JohnE 强调的问题是没有匹配项,所以你得到一个空数组.你在这里尝试的有点奇怪,你需要充分解释你想要做什么