迭代列表以在数据框中创建新列

时间:2017-06-01 12:15:47

标签: python list loops

我在数据框中有一个字符串列,如下所示:

ID  col1
id1 AA's 2015:45,BB:96
id2 Jigga:91,OO:73,BB:34

我想创建一个新的数据框,它可以采用以下形状:

ID  var1    var2    var3    var4
id1 45      96      0       0
id2 0       34      91      73

其中var1=AA's 2015,var2=BB,var3=Jigga,var4=OO

我已将字符串第一个值的所有不同值存储在列表中,如下所示:

["AA's 2015","BB","Jigga","OO"]

我想迭代这个列表并为每个值创建一个变量var [i] 这将从col1获取该特定ID的值。

我可以使用for循环遍历列表。但是如何查找值并放入var [i]?

任何想法都将受到赞赏

1 个答案:

答案 0 :(得分:1)

使用apply将字符串操作为pandas系列。传递给apply的函数将在每个字符串上调用。然后将返回的值Series合并为单个DataFrame。 apply返回此DataFrame。

DataFrame的列标签来自合并所有系列的索引。合并还将Series值放在适当的列中,从而产生所需的结果:

import pandas as pd
df = pd.DataFrame({'ID': ['id1', 'id2'], 'col1': ["AA: 2015:45,BB:96", 'Jigga:91,OO:73,BB:34']})

result = df['col1'].apply(lambda x: pd.Series(
    dict([
        item for item in [
            part.rsplit(':',1) for part in x.split(',')] 
         if len(item)>1  # remove items corresponding to empty strings
    ]))).fillna(0)
result = result.rename(columns={name:'var{}'.format(i) for i, name in 
                                enumerate(result.columns, 1)})
result = pd.concat([df[['ID']], result], axis=1)
print(result)

产量

    ID var1 var2 var3 var4
0  id1   45   96    0    0
1  id2    0   34   91   73

我学会了这个技巧here