【问题标题】:Adding column to pandas DataFrame containing list of other columns' values将列添加到包含其他列值列表的 pandas DataFrame
【发布时间】:2015-04-25 06:24:52
【问题描述】:

我有一个需要添加一列的 DataFrame。该列需要是两个值的列表:

当前表:

    lat  long  other_value
0   50   50    x
1   60   50    y
2   70   50    z
3   80   50    a

需要的表格:

    lat  long  other_value  new_column
0   50   50    x            [50, 50]
1   60   50    y            [60, 50]
2   70   50    z            [70, 50]
3   80   50    a            [80, 50]

我知道这非常简单,但文档似乎没有涵盖这一点(至少显然没有)。

【问题讨论】:

    标签: python list pandas dataframe


    【解决方案1】:

    一种方法是使用tolist():

    >>> df['new_column'] = df[['lat', 'long']].values.tolist()
    >>> df
       lat  long other_value new_column
    0   50    50           x   [50, 50]
    1   60    50           y   [60, 50]
    2   70    50           z   [70, 50]
    3   80    50           a   [80, 50]
    

    不过,总的来说,我会非常谨慎地在 DataFrame 中使用列表,因为它们更难以在列中进行操作,而且您无法获得整数/浮点数带来的许多性能优势。

    【讨论】:

    • 我想知道数据框中的列表。有关为什么您无法检查 df 中的位置是否为空列表的任何信息?
    • 我更新了我的问题以包含一个额外的列。这就是 .values 不起作用的原因。也就是说,除非我可以说 .values 并指定要使用的列。你认为我可以这样做吗?
    • @LiamFoley:我不敢说实话。我希望 Pandas 开发人员从来没有真正考虑过 df 值的列表(或其他 Python 数据结构),因此它们并不真正受到支持。也许这将在未来的版本中改变。与此同时,一些str 方法可以在列表中正常工作,例如df['new_column'].str.len() == 0 将检查列表是否为空。
    • 另外,如果您需要单独访问列,我相信列表会转换为 numpy 数组对象。 (虽然不是 100% 确定)
    【解决方案2】:

    你可以使用 zip

    df['new_column'] = list(zip(df.lat, df.long))
    

    【讨论】:

      猜你喜欢
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 2019-07-06
      相关资源
      最近更新 更多