动态添加pandas数据框中的列

时间:2016-11-07 14:15:33

标签: python pandas dataframe

我有以下代码来加载数据框

for (int i = 0; i < nodeList.getLength(); i++) {
    Node currentNode = nodeList.item(i);
    if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
        currentNode.getNodeName();
        currentNode.getTextContent();
        //And whatever you like
    }
}

给出以下输出,请参阅csv的结构

import pandas as pd

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

现在,我想基于现有列添加额外的列。 我有一个列表,其中包含参与列的索引。 它可以是 0,1 0,2,3 1,2,3

我需要动态创建它。 我可以提出以下

          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

放置索引似乎不起作用。 我想加入这些专栏。使用df1['combined'] = df1['City']+','+df1['State']

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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