Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add columns in pandas dataframe dynamically

I have following code to load dataframe

import pandas as pd

ufo = pd.read_csv('csv_path')
print(ufo.loc[[0,1,2] , :])

which gives following output, see the structure of the csv

          City Colors Reported Shape Reported State             Time
0       Ithaca             NaN       TRIANGLE    NY   6/1/1930 22:00
1  Willingboro             NaN          OTHER    NJ  6/30/1930 20:00
2      Holyoke             NaN           OVAL    CO  2/15/1931 14:00

Now, I want to add an extra column based on existing column. I have a list which consist of indices of participating columns. It can be 0,1 or 0,2,3 or 1,2,3 anything.

I need to create it dynamically. I could come up with following

df1['combined'] = df1['City']+','+df1['State']

Putting index doesn't seem to work. I want to join those columns. using ','.join()

like image 257
Ishan Bhatt Avatar asked Nov 07 '16 14:11

Ishan Bhatt


2 Answers

Assuming the data types of all the columns you want to join are str, you can use [] with integer to pick up the columns and use apply to join them:

df[[0,2,3]].apply(','.join, axis=1)

#0      Ithaca,TRIANGLE,NY
#1    Willingboro,OTHER,NJ
#2         Holyoke,OVAL,CO
#dtype: object
like image 115
Psidom Avatar answered Sep 19 '22 16:09

Psidom


If the list of indices is l, you can use pd.Series.cat:

df[df.columns[l[0]]].astype(str).str.cat([df[df.columns[i]].astype(str) for i in l[1: ]], sep=',')

Example

In [18]: df = pd.DataFrame({'a': [1, 2], 'b': [2, 'b'], 'c': [3, 'd']})

In [19]: df[df.columns[l[0]]].astype(str).str.cat([df[df.columns[i]].astype(str) for i in l[1: ]], sep=',')
Out[19]: 
0    1,2
1    2,b
Name: a, dtype: object
like image 34
Ami Tavory Avatar answered Sep 20 '22 16:09

Ami Tavory