将列添加到包含其他列值列表的 pandas DataFrame

Posted

技术标签:

【中文标题】将列添加到包含其他列值列表的 pandas DataFrame【英文标题】:Adding column to pandas DataFrame containing list of other columns' values 【发布时间】: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]

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

【问题讨论】:

【参考方案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))

【讨论】:

以上是关于将列添加到包含其他列值列表的 pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

Pandas-将列值转换为顺序整数

将列值转换为日期时间以插入 AccessDB

将列值分配给数据框中的变量

如何将列值分隔为列名?

Python:如何在比较其他列时将列值填充到另一个数据框中的新列?

如何使用 for 循环将列值添加到数据框字典中,以便每个数据框都有一个唯一的列?