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

2024-09-24 22:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下问题。我有一个包含多个列的dataframe,其中一个包含字符串作为值。我想遍历此列,更改这些值并将更改的值保存到新列中。在

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

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的列表),并创建一个名为类的空list。 然后对listi中的每个值进行计数,如果在列表中至少出现三次,则将其附加到类中。完成的列表是sortedset(),这样列表中的所有对象都是唯一的,最后以逗号再次连接到字符串。然后我想将这个唯一的值列表追加到一个新列中,在与派生更改值的行值相同的索引位置。例如:

^{pr2}$

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


Tags: 字符串代码dataframedf列表forgetstring
1条回答
网友
1楼 · 发布于 2024-09-24 22:25:26

您可以从集合中使用powerfullCounter

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

相关问题 更多 >