Pandas:按数字列名聚合,并在替换时给出错误

时间:2017-09-03 17:01:53

标签: python pandas

为了消除测量时的变化,我想在特定范围内进行编译。

例如,我想将列名称在整数的±0.1范围内求和,并将其分配给整数列。但是,由于形状错误,我无法替代。

我认为这是由转换列的类型引起的,但我应该怎么做呢?

谢谢。

import pandas as pd
import  numpy as np

df = pd.DataFrame(data= np.arange(0,10000,1).reshape(100,100))
df.columns = np.arange(0,10,0.1)

print(df.head())
df.columns = df.columns.astype(float)
temp = df.columns.values

for n in np.arange(1, 9, 1):
 l = n - 0.1
 m = n + 0.1
 calc_n = temp[np.where((temp >= l) & (temp <= m))]
 calc = np.sum(df[df.columns.intersection(calc_n)], axis=1)
 n_position = temp[np.where(temp == n)]
 df[n_position] = calc.values

ValueError:形状不匹配:形状的值数组(100,)无法广播到形状的索引结果(1,100)

1 个答案:

答案 0 :(得分:0)

ValueError是因为n_position是一个数组。因此df[n_position]会为您提供数据框而不是列。

使用浮点数作为索引通常不是一个好主意。比较花车时你应该小心。此行calc_n = temp[np.where((temp >= l) & (temp <= m))]不会始终提供准确的结果。

首先,请尝试:

for n in np.arange(1, 9, 1):
    margin = 0.101     # set your own margin
    calc_n = np.where(np.abs(temp-n) < margin)
    df[n] = df.iloc[:,calc_n[0]].sum(axis=1)