![](/img/trans.png)
[英]sum of multiplication of cells in the same row but different column for pandas data frame
[英]How to sum one column value by a different range in pandas data frame
range number Value
3600-3700 1301 5
3700-3800 1301 6
3600-3700 1302 10
3700-3800 1302 12
3800-3900 1301 3
3800-3900 1302 4
3900-4000 1301 5
3900-4000 1302 6
這是我的輸入,我希望我的 output 是,
range number Value
3600-3800 1301 11
3600-3800 1302 22
3800-4000 1301 8
3800-4000 1302 10
我想將 value 列與新的范圍值相加。 誰能幫我? 我正在使用 pandas
首先,讓我們添加列range
的min
和max
,以便我們更方便地使用它。
df['min_range'] = df['range'].str.split("-").apply(lambda x: min(x))
df['max_range'] = df['range'].str.split("-").apply(lambda x: max(x))
df
range number value min_range max_range
0 3600-3700 1301 5 3600 3700
1 3700-3800 1301 6 3700 3800
2 3600-3700 1302 10 3600 3700
3 3700-3800 1302 12 3700 3800
然后,我們應該有一個針對不同列的具有不同聚合函數的groupby
,我們這樣做如下:
df_final = df.groupby('number').agg({
'min_range': 'min',
'max_range': 'max',
'value': 'sum'
})
df_final
min_range max_range value
number
1301 3600 3800 11
1302 3600 3800 22
如果您想組合min_range
和max_range
以僅將一列作為range
,您可以執行以下操作:
df_final['range'] = df_final['min_range'].astype(str) + "-" + df_final['max_range'].astype(str)
df_final.drop(columns=['min_range', 'max_range'], inplace=True)
df_final
value range
number
1301 11 3600-3800
1302 22 3600-3800
df=pd.read_csv('ranges.csv',dtype= {'range':'string','number':'string','value':np.int32})
print(df.columns)
#df['min'],df['max'],*rest=df['range'].str.split('-')
key=0
for x,y in df['range'].str.split('-'):
df.loc[key,'min']=x
df.loc[key,'max']=y
key+=1
print(df.groupby(['number','min','max'])['value'].sum())
output:
number min max
1301 3600 3700 5
3700 3800 6
3800 3900 3
3900 4000 5
1302 3600 3700 10
3700 3800 12
3800 3900 4
3900 4000 6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.