为垃圾箱创建新列是可行的,但在所有行中只给出一个垃圾箱

我快要疯了,因为无论我做什么,我就是不知道出了什么问题。


问题:


我有一个df。其中一栏是:Opnameduur。这是 int64 类型。


我的 def 创建了一个名为:Klasse 的新列。这工作正常。但是....根据 df.Opnameduur 列中找到的值,该函数应该在相应行中写入一个 bin (dag, kort, middel, long (witch 是荷兰语,表示日、短、中、长)新专栏 df.Klasse。


已创建列 df.Klasse,但 df.KLasse 中的所有值均设置为:dag。


我只是不明白这里出了什么问题......


df.Opnameduur.head()

给出:


0    1

1    1

2    9

3    1

4    3

因此,前两行应给出:dag,在 df.Klasse 中,第三行应给出:long。ETC。


但是,我的 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。


提前致谢!!!问候简


DIEA
浏览 1579回答 1
1回答

婷婷同学_

在执行 时df['Klasse'] == 'value',value被分配给整个列,因为分配是矢量化操作。您可以使用locpandas 中的 dataframe 方法并传递行和列的正确索引名称,以重新分配值,如下所示: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'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python