为 bins 创建新列有效,但在所有行中只给出一个 bin
Making new column for bins works, but gives only one bin in all rows
我快要疯了,因为无论我做什么,我都不知道哪里出了问题。
问题:
我有一个df。其中一列是:Opnameduur。这是 int64 类型。
我的 def 创建了一个名为:Klasse 的新列。这工作正常。但....
根据在列 df.Opnameduur 中找到的值,该函数应该在对应的行中写入一个 bin(dag、kort、middel、long( 是荷兰语的日、短、中、长)新列 df.Klasse.
列已创建,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,但在深入研究之前,我想了解我在这里的错误(应该是...)非常简单的 if、elif、else。
提前致谢!!!问候一月
在执行 df['Klasse'] == 'value'
时,value
被分配给整个列,因为分配是矢量化操作。您可以使用 pandas 中数据框的 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'
我快要疯了,因为无论我做什么,我都不知道哪里出了问题。
问题:
我有一个df。其中一列是:Opnameduur。这是 int64 类型。
我的 def 创建了一个名为:Klasse 的新列。这工作正常。但.... 根据在列 df.Opnameduur 中找到的值,该函数应该在对应的行中写入一个 bin(dag、kort、middel、long( 是荷兰语的日、短、中、长)新列 df.Klasse.
列已创建,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,但在深入研究之前,我想了解我在这里的错误(应该是...)非常简单的 if、elif、else。
提前致谢!!!问候一月
在执行 df['Klasse'] == 'value'
时,value
被分配给整个列,因为分配是矢量化操作。您可以使用 pandas 中数据框的 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'