gpt4 book ai didi

python - 如何在 python 中循环数据框、创建新列并向其附加值

转载 作者:行者123 更新时间:2023-12-01 04:18:23 25 4
gpt4 key购买 nike

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

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

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的列表)并创建一个空的列出 称为类的列表。然后,它对 listi 中的每个值进行计数,如果该值在列表中至少出现 3 次,则将其附加到 Classes 中。然后对完成的列表进行排序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 中最后一行的原始值。有人可以向我解释一下这里的问题是什么吗?

最佳答案

您可以使用集合中强大的计数器:

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

关于python - 如何在 python 中循环数据框、创建新列并向其附加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34039290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com