【问题标题】:{Python} - [Pandas] - How sum columns by condition less than in columns name{Python} - [Pandas] - 如何按条件对列求和小于列名
【发布时间】:2019-12-19 15:11:15
【问题描述】:

首先解释数据框,列'0-156','156-234','234-546' ....'> 76830'是每个距离范围的百分比分布,以米为单位,总计100%。 “单元格名称”列是指其他列的数据元素,“距离”列是触发所需总和的列。

我需要对小于“距离”值(米) 列。

下面是用于测试的创建代码。

import pandas as pd 

# initialize list of lists 
data = [['Test1',0.36516562,19.065996,49.15094,24.344206,0.49186087,1.24217,5.2812457,0.05841639,0,0,0,0,158.4122868],
['Test2',0.20406325,10.664485,48.70978,14.885571,0.46103176,8.75815,14.200708,2.1162114,0,0,0,0,192.553074],
['Test3',0.13483211,0.6521175,6.124511,41.61725,45.0036,5.405257,1.0494527,0.012979688,0,0,0,0,1759.480042]
]  

# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Cell Name','0-156','156-234','234-546','546-1014','1014-1950','1950-3510','3510-6630','6630-14430','14430-30030','30030-53430','53430-76830','>76830','Distance']) 

应该做的例子: 因此,“距离”列的值 = 158.412286772863 必须将以下列的值

非常感谢!

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    据我了解,您希望将一行中的所有百分比值相加,其中列描述的较低值(如果是“0-156”,则为 0,如果是“156-” 234' 它将是 156,依此类推...)小于距离列中的值。 首先,我建议您将类似字符串的列名转换为值,例如:

    lowerlimit=df.columns[2]
    >>'156-234'
    

    然后只读取字符串直到'-'并使其成为一个数字

    int(lowerlimit[:lowerlimit.find('-')])
    >> 156
    

    您可以循环遍历所有列并为下限创建一个新行。

    为了更简单一点,我为您的示例省略了第一列,并添加了另一列具有每列下限的第一行,您可以按上述方式生成。然后这段代码就可以工作了:

    data = [[0,156,234,546,1014,1950,3510,6630,11430,30030,53430,76830,1e-23],[0.36516562,19.065996,49.15094,24.344206,0.49186087,1.24217,5.2812457,0.05841639,0,0,0,0,158.4122868],
    [0.20406325,10.664485,48.70978,14.885571,0.46103176,8.75815,14.200708,2.1162114,0,0,0,0,192.553074],
    [0.13483211,0.6521175,6.124511,41.61725,45.0036,5.405257,1.0494527,0.012979688,0,0,0,0,1759.480042]
    ]  
    
    # Create the pandas DataFrame 
    df = pd.DataFrame(data, columns = ['0-156','156-234','234-546','546-1014','1014-1950','1950-3510','3510-6630','6630-14430','14430-30030','30030-53430','53430-76830','76830-','Distance'])
    df['lastindex']=None
    df['sum']=None
    

    在创建基本数据框后,我添加了两列“lastindex”和“sum”。

    然后我正在搜索每一行中的最后一个索引,即其下限低于该行中给定的距离 (df.iloc[x,-3]);之后我总结了该行中的各个列。

    for i in np.arange(1,len(df)):
        df.at[i,'lastindex']=np.where(df.iloc[0,:-3]<df.iloc[i,-3])[0][-1]
        df.at[i,'sum']=sum(df.iloc[i][0:df.at[i,'lastindex']+1])
    

    我希望,这会有所帮助。最好的,lepakk

    【讨论】:

      猜你喜欢
      • 2018-04-14
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 2021-06-24
      • 2016-08-08
      • 2020-05-30
      相关资源
      最近更新 更多