简体   繁体   中英

how to dynamically add values of some of the columns in a dataframe?

这是数据框

dataframe in the image

year= 2020 (MAX COLUMN)
lastFifthYear = year - 4
input = '2001509-00'

I want to add all the values between year(2020) and lastFifthYear(2016) WHERE INPUT PARTNO = input

so for input value I should get 4+6+2+3+2 (2016+2017+2018+2019+2020) ie 17

please give me some code

Here is some code that should work but you definitely need to improve on the way you ask questions here:-)

Considering df is the table you pasted as image above.

>>> year = 2016
>>> df_new=df.query('INPUT_PARTNO == "2001509-00"').melt(['ACTUAL_GI_YEAR', 'INPUT_PARTNO'],  var_name='year',  value_name='number')

>>> df_new.year=df_new.year.astype(int)

>>> df_new[df_new.year >= year].groupby(['ACTUAL_GI_YEAR','INPUT_PARTNO']).agg({'number' : sum})
                             number
ACTUAL_GI_YEAR INPUT_PARTNO
0              2001509-00        17

Example Setup

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0, 10, (10, 10)),
                  columns=list('ab')+list(range(2,10)))

Solved

#sum where a == 9 columns between 3,6 by rows

df['number'] = df.loc[df['a'].eq(9), 
                      pd.to_numeric(df.columns, errors='coerce')
                        .to_series()
                        .between(3, 6)
                        .values].sum(axis=1)
print(df)


   a  b  2  3  4  5  6  7  8  9  number
0  1  9  9  2  6  0  6  1  4  2     NaN
1  2  3  4  8  7  2  4  0  0  6     NaN
2  2  2  7  4  9  6  7  1  0  0     NaN
3  0  3  5  3  0  4  2  7  2  6     NaN
4  7  7  1  4  7  7  9  7  4  2     NaN
5  9  9  9  0  3  3  3  8  7  7     9.0
6  9  0  5  5  7  9  6  6  5  7    27.0
7  2  1  9  1  9  3  3  4  4  9     NaN
8  4  0  5  9  6  7  3  9  1  6     NaN
9  5  5  0  8  6  4  5  4  7  4     NaN

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM