{Python} - [熊猫] - 如何按条件对列求和小于列名



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

我需要对"0-156"、"156-234"、"234-546"列的值求和......"> 76830"小于"距离"(米(列的值。

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

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 必须对以下列的值 <= 求和,0-156,'156-234',总计 19.43116162 %。

非常感谢!

据我了解,您想汇总一行中的所有百分比值,其中列描述的较低值(在"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])

我希望,这是有帮助的。贝斯特,勒帕克

最新更新