为了消除测量时的变化,我想在特定范围内进行编译。
例如,我想将列名称在整数的±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)
答案 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)