【发布时间】:2016-03-06 11:46:27
【问题描述】:
我有以下问题。我有一个包含几列的数据框,其中之一包含字符串作为值。我想遍历此列,更改这些值并将更改的值保存在新列中。
到目前为止我写的代码是这样的:
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 中的每个值,如果它在列表中至少出现 3 次,则将其附加到 Classes 中。然后完成的列表是sorted 和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.xml 中最后一行的原始值。有人可以向我解释这里的问题是什么吗?
【问题讨论】:
-
索引存在问题,通过查看您的代码,您尝试在每次迭代中添加一个名为“新列”的列,其值来自 Unique ...因此该列被覆盖并覆盖每个行...这就是为什么您与最后一行具有相同的值...
标签: python for-loop pandas dataframe