【问题标题】:Pandas:Aggregate by numerical column name and give error when substitutionPandas:按数值列名聚合,替换时报错
【发布时间】:2017-09-04 12:16:55
【问题描述】:

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

例如,我想将整数的±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) 的索引结果

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    ValueError 是因为n_position 是一个数组。所以df[n_position] 给你一个数据框而不是一个列。

    使用浮点数作为索引通常不是一个好主意。比较浮点数时应该小心。这条线calc_n = temp[np.where((temp &gt;= l) &amp; (temp &lt;= 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)
    

    【讨论】:

    • df.iloc [:, calc - n [0]]。 sum 是一个很好的解决方案。下次我不会使用flot。非常感谢。
    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2013-10-20
    • 1970-01-01
    • 2017-06-20
    • 2021-12-05
    • 2019-08-09
    相关资源
    最近更新 更多