首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何循环遍历dataframe,创建新列并在python中追加值

如何循环遍历dataframe,创建新列并在python中追加值
EN

Stack Overflow用户
提问于 2015-12-02 09:36:36
回答 1查看 3.5K关注 0票数 2

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

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

代码语言:javascript
运行
复制
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(),因此列表中的所有对象都是唯一的,最后在逗号处再次连接到一个字符串。然后,我想在一个新列中追加这个唯一的值列表,并将其与派生出的行值位于相同的索引位置。例如:

代码语言:javascript
运行
复制
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时,我的代码似乎工作得很好,因为它会打印所有转换后的值。但是,如果我像在我的示例中一样执行代码,那么dataframe的NewColumn将完全填充相同的值,这似乎与df中最后一行的原始值相对应。有人能给我解释一下这是什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 10:26:09

您可以使用来自集合的强力Counter

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34039290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档