如何在python中循环数据帧、创建新列并向其追加值

如何在python中循环数据帧、创建新列并向其追加值,python,for-loop,pandas,dataframe,Python,For Loop,Pandas,Dataframe,我有以下问题。我有一个包含多个列的数据框架,其中一个包含字符串作为值。我想循环浏览此列,更改这些值,并将更改后的值保存到新列中 到目前为止,我编写的代码如下所示: def get_classes(x): for index, string in df['column'].iteritems(): listi = string.split(',') Classes=[] for value in listi:

我有以下问题。我有一个包含多个列的数据框架,其中一个包含字符串作为值。我想循环浏览此列,更改这些值,并将更改后的值保存到新列中

到目前为止,我编写的代码如下所示:

def get_classes(x):    
    for index, string in df['column'].iteritems():
        listi = string.split(',')
        Classes=[]

        for value in listi:
            count=listi.count(value)
            if count >= 3: 
                Classes.append(value)

        Unique=(',').join(sorted(list(set(Classes))))
        df['NewColumn']=Unique


End.apply(get_classes)
它循环遍历
df['column']
的行,在每个
处拆分字符串(创建一个名为listi的列表),并创建一个名为class的空
列表。
然后,它统计listi中的每个值,如果该值在列表中至少出现三次,则将其附加到类中。然后对完成的列表进行排序
set()
,这样列表中的所有对象都是唯一的,最后再次以逗号连接到字符串。然后,我想将这个唯一的值列表附加到一个新列中,在与派生更改值的行值相同的索引位置。例如:

df
  column    NewColumn
0 A,A,A,C   A 
1 C,B,C,C   C
2 B,B,B,B   B

当我执行
print Unique
而不是
df['NewColumn']=Unique
时,我的代码似乎工作正常,因为它随后会打印所有转换的值。但是,如果像我的示例中那样执行代码,那么数据帧的
NewColumn
将完全填充相同的值,这似乎与df中最后一行的原始值相对应。有人能给我解释一下这里有什么问题吗

您可以从集合中使用powerfull
计数器

from collections import Counter

foo = lambda x: ','.join(sorted([k for k,v in Counter(x).iteritems() if v>=3]))

df['new'] = df['column'].str.split(',').map(foo)


#In [33]: df
#Out[33]:
#    column NewColumn new
#0  A,A,A,C         A   A
#1  C,B,C,C         C   C
#2  B,B,B,B         B   B

谢谢,这个很好用。但是你知道为什么我的代码没有按照我希望的方式工作吗?我强烈建议你使用这个
计数器
,因为你将函数本身与数据帧上的循环解耦(便于对函数进行单元测试),并且。。。它也是。。。更简洁/更容易理解:2行。在索引方面存在一些问题,通过查看代码,您可以尝试在每次迭代中添加一个名为“newcolumn”的列,该列的值来自Unique。。。所以这列会被覆盖,每一行都会被覆盖…这就是为什么最后一行的值相同。。。