为 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'