2016-11-07 80 views
4

我有下面的代碼加載數據幀列添加動態

import pandas as pd 

ufo = pd.read_csv('csv_path') 
print ufo.loc[[0,1,2] , :] 
這給下面的輸出

,請參閱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 

的結構現在,我想添加一個額外的列基於現有的專欄。 我有一個包含參與列索引的列表。 它可以是0,10,2,31,2,3什麼。

我需要動態創建它。 我能想出以下

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

把指數似乎並沒有工作。 我想加入這些列。使用','.join()

回答

3

假設你想join所有列的數據類型是str,您可以使用[]整數拿起列和使用apply加入他們的行列:

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

#0  Ithaca,TRIANGLE,NY 
#1 Willingboro,OTHER,NJ 
#2   Holyoke,OVAL,CO 
#dtype: object 
3

如果名單指數是l,你可以使用pd.Series.cat

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

實施例

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 
+0

相信這是一樣的:'DF [[1 [0]]] str.cat(DF [L [1:]],月=',')' – mdurant

+0

@mdurant謝謝。我懷疑你原則上可能是對的,但是你的特定代碼(以及它的一些變體)根本不會被我運行。我得到的第一個問題是'DataFrame'對象沒有'str'屬性(但是修復這個問題給了我其他的錯誤)。 –

3
def dyna_join(df, positions): 
    return pd.concat([df, df.iloc[:, positions].apply(','.join, 1).rename('new_col')], axis=1) 


dyna_join(df, [0, -2]) 

enter image description here

+1

,如果是「int」或「float」列,可能會添加'astype(str)'。 – jezrael