简体   繁体   中英

assign column names in pandas from pd.series an loop

Let say my df:

A User1 User2
1 0       0
2 1       1
3 1       0

And I want create another column in dataframe that was sum of column user1 plus user So it's easy: df['sum_result_Newcolum'] = df['user1']+df['user2'] . So it looks like this:

 A User1 User2   sum_result_Newcolum
    1 0       0   0
    2 1       1   2
    3 1       0   1

But I have panda.series look like this:

    0
0   AC.IR
1   AC.PO
2   B.0
3   B.1

end etc. So I want create for statement there run through pd.series and add value to column name. So that issue, I try something like this without any success:

df['sum_result_'+ {cv_details.get(0)}]=df['user1']+df['user2']
df['sum_result_'+ cv_details.get(0)]=df['user1']+df['user2']
df['sum_result_'+ cv_details[0]]=df['user1']+df['user2']
df['sum_result_'+ cv_details.iloc[0]]=df['user1']+df['user2']

All time best result is column name: "sum_result_Action..."

Maybe solution convert pd.series to frame?

  • it's not 100% clear what your expected result is.
  • If you want a new column for each value in your series
    • assign ** kwargs can be built as a dict comprehension
    • from your sample code, you have defined a static calculation User1 + User2
import io
import pandas as pd

df = pd.read_csv(io.StringIO("""A User1 User2
1 0       0
2 1       1
3 1       0"""), sep="\s+")

cv_details = pd.Series(['AC.IR', 'AC.PO', 'B.0', 'B.1'])

df.assign(**{f"sum_result_{v}":df["User1"]+df["User2"] for v in cv_details})

A User1 User2 sum_result_AC.IR sum_result_AC.PO sum_result_B.0 sum_result_B.1
0 1 0 0 0 0 0 0
1 2 1 1 2 2 2 2
2 3 1 0 1 1 1 1

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