【问题标题】:Python: create new column from existing and add generated numbersPython:从现有创建新列并添加生成的数字
【发布时间】:2021-05-27 16:50:11
【问题描述】:

DataFrame 如下所示:

atom_type x y z
N 15.987990 10.554990 3.897990
C 16.980990 9.479010 3.851010
H 17.943000 9.921000 4.110000

我需要创建一个名为 atom_label 的新列,该列将包含 atom_type 和一个从 1 到 32 的数字。现在我尝试这样做:

atom_numbers = np.arange(start = 0, stop = 32, step = 1)
df['atom_label'] = str(df['atom_type'] + str(atom_numbers.item))

但它似乎没有像我希望的那样工作,它用字符串N<built-in method item of numpy.ndarray ... 填充列atom_label。我似乎无法告诉 Python 将现有列中的值与数组中的 next 值配对并将其放入新列中。

【问题讨论】:

    标签: python arrays pandas string


    【解决方案1】:

    您可以执行以下操作:

    import pandas as pd, numpy as np
    
    # init dataframe
    df = pd.DataFrame()
    df["atom_type"] = ['N', 'C', 'H']
    
    # init suffixes
    atom_numbers = np.arange(start = 0, stop = 32, step = 1)
    
    # add column
    df["atom_label"]=[str(df["atom_type"][i]) + str(atom_numbers[i]) for i in range(df.shape[0])]
    

    使用您的解决方案将始终重用atom_type 列的第一个值,而atom_numbers.item 是一种方法,因此调用str(method) 将返回类似<method name, package, a.s.o ...> 的内容。

    在上述解决方案中,我们遍历列和 numpy 数组中的所有值来构建一个新值。

    【讨论】:

      【解决方案2】:

      使用Series.astypeSeries 的值转换为字符串:

      atom_numbers = np.arange(start = 0, stop = len(df), step = 1)
      df['atom_label'] = atom_numbers
      
      df['atom_label'] = df['atom_type'].astype(str) + df['atom_label'].astype(str)
      

      【讨论】:

        【解决方案3】:

        item 是一种需要您引用的索引作为参数的方法。 https://numpy.org/doc/stable/reference/generated/numpy.ndarray.item.html

        您可以使用 for 循环:

        for i in range(0, atom_numbers.size):
            df['atom_label'][i] = str(df['atom_type'][i] + str(atom_numbers.item(i)))
        

        【讨论】:

          猜你喜欢
          • 2015-07-27
          • 2019-08-22
          • 2022-07-28
          • 1970-01-01
          • 2020-09-18
          • 2021-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多