问题描述
我在这里疯了,因为无论我做什么,我都无法弄清楚哪里出了问题。
问题:
我有一个df。列之一是:Opnameduur。这是int64类型。
我的定义创建了一个名为Klasse的新列。这工作。但.... 根据在df.Opnameduur列中找到的值,该函数应该在新列df.Klasse的相应行中写入一个bin(dag,kort,middel,long(女巫是荷兰人的一天,short,middle,long))。
创建的列是df.Klasse,但是df.KLasse中的所有值都设置为:dag。
我就是不明白这里出了什么问题。...
df.Opnameduur.head()
给予:
0 1
1 1
2 9
3 1
4 3
因此,前两行应为:dag,在df.Klasse中,第三行应为:long。等
但是,我的def在整个新列df.Klasse中设置了'dag'。
我自己没看到它真是愚蠢。所以..我需要你的帮助!这是我的功能:
def Klasse(df):
for index,value in df.Opnameduur.items():
if value == 1:
df['Klasse'] = 'dag'
elif value == 2:
df['Klasse'] = 'kort'
elif value == 3:
df['Klasse'] = 'kort'
elif value == 4:
df['Klasse'] = 'middel'
elif value == 5:
df['Klasse'] = 'middel'
elif value == 6:
df['Klasse'] = 'middel'
elif value >= 7:
df['Klasse'] = 'lang'
else:
df['Klasse'] = 'onbekend'
我现在已经阅读了有关pandas.cut的文章,但是在深入探讨之前,我想用(如果...)相当简单的方式(如果不是的话)来理解我的错误。
提前谢谢!!!问候Jan
解决方法
在进行df['Klasse'] == 'value'
时,value
被分配给整列,因为分配是向量化操作。您可以在熊猫中使用数据框的loc
方法,并传递行和列的正确索引名称,以重新分配值,例如:
def Klasse(df):
for index,value in df.Opnameduur.items():
if value == 1:
df.loc[index,'Klasse'] = 'dag'
elif value == 2:
df.loc[index,'Klasse'] = 'kort'
elif value == 3:
df.loc[index,'Klasse'] = 'kort'
elif value == 4:
df.loc[index,'Klasse'] = 'middel'
elif value == 5:
df.loc[index,'Klasse'] = 'middel'
elif value == 6:
df.loc[index,'Klasse'] = 'middel'
elif value >= 7:
df.loc[index,'Klasse'] = 'lang'
else:
df.loc[index,'Klasse'] = 'onbekend'