【问题标题】:Create columns in dataframe from list (Number of columns change)从列表中创建数据框中的列(列数更改)
【发布时间】:2021-01-21 02:43:46
【问题描述】:

我正在使用 pandas 数据框,但遇到了问题。

我的输入是一个列表,我不知道列表中有多少元素,它可以是 1 到 5 或 6 之间的任何值。我需要向数据框添加新列,每个元素对应一个列表。

目前,我将 cmets 添加到行中,但它不会自动工作。我的代码:

list = ['banana', 'apple', 'kiwi'] (3 elements, so i comment 2 lines)

df.loc[:, list[0]] = np.where(df['food'] == list[0], 1.0, 0.0)
df.loc[:, list[1]] = np.where(df['food'] == list[1], 1.0, 0.0)
df.loc[:, list[2]] = np.where(df['food'] == list[2], 1.0, 0.0)
#df.loc[:, list[3]] = np.where(df['food'] == list[3], 1.0, 0.0)
#df.loc[:, list[4]] = np.where(df['food'] == list[4], 1.0, 0.0)

我希望有一些东西可以读取列表中的元素数量,然后自动创建正确的列数,而不需要添加 cmets。

【问题讨论】:

    标签: python python-3.x pandas list dataframe


    【解决方案1】:

    我认为在 pandas 中最好避免循环,因此请使用 get_dummiesSeries.isin 过滤的行:

    L = ['banana', 'apple', 'kiwi']
    df1 = pd.get_dummies(df.loc[df['food'].isin(L), 'food'])
    

    最后添加0 行并添加到原始使用DataFrame.reindexDataFrame.join

    df = df.join(df1.reindex(df1.index, fill_value=0.0))
    

    【讨论】:

      【解决方案2】:

      您可以通过简单地使用 for 循环来解决这个问题:

      l= ['banana', 'apple', 'kiwi']
      
      for fruit in l:
          df.loc[:, fruit] = np.where(df['food'] == fruit, 1.0, 0.0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-19
        • 2021-12-17
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        • 2020-11-15
        • 1970-01-01
        相关资源
        最近更新 更多