为 Pandas 中的多列赋值[重复]

Posted

技术标签:

【中文标题】为 Pandas 中的多列赋值[重复]【英文标题】:Assign values to multiple columns in Pandas [duplicate] 【发布时间】:2016-03-08 13:53:09 【问题描述】:

我已经关注了简单的 DataFrame - df:

   0
0  1
1  2
2  3

一旦我尝试创建一个新列并为它们分配一些值,如下例所示:

df['col2', 'col3'] = [(2,3), (2,3), (2,3)]

我得到了以下结构

   0 (col2, col3)
0  1    (2, 3)
1  2    (2, 3)
2  3    (2, 3)

但是,我正在寻找一种方法:

   0 col2, col3
0  1    2,   3
1  2    2,   3
2  3    2,   3

【问题讨论】:

pandas.pydata.org/pandas-docs/stable/10min.html 你看过文档了吗?如何创建数据框非常清楚。 df['col2', 'col3'] = [2,3] 可以正常工作。 (在所有行都相同的情况下) 【参考方案1】:

也可以使用assign

df.assign(col2 = 2, col3= 3)

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html

【讨论】:

【参考方案2】:

我在尝试将多个标量值应用于多个新列时遇到了这个问题,但找不到更好的方法。如果我遗漏了一些明显的东西,请告诉我,但df[['b','c']] = 0 不起作用。但这是简化的代码:

# Create the "current" dataframe
df = pd.DataFrame('a':[1,2])

# List of columns I want to add
col_list = ['b','c']

# Quickly create key : scalar value dictionary
scalar_dict =  c : 0 for c in col_list 

# Create the dataframe for those columns - key here is setting the index = df.index
df[col_list] = pd.DataFrame(scalar_dict, index = df.index)

或者,似乎稍微快一点的是使用.assign()

df = df.assign(**scalar_dict)

【讨论】:

【参考方案3】:

有一种方便的解决方案可以通过元组列表将多个系列连接到数据帧。您可以从您的元组列表中构造一个数据框之前分配:

df = pd.DataFrame(0: [1, 2, 3])
df[['col2', 'col3']] = pd.DataFrame([(2,3), (2,3), (2,3)])

print(df)

   0  col2  col3
0  1     2     3
1  2     2     3
2  3     2     3

这很方便,例如,当您希望加入任意数量的系列时。

【讨论】:

迄今为止最好的解决方案!特别是当你有一个 numpy 数组时。【参考方案4】:

看起来解决方案很简单:

df['col2'], df['col3'] = zip(*[(2,3), (2,3), (2,3)])

【讨论】:

虽然这段代码可以回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。从长远来看,纯代码的答案没有用处。 如果您的问题很简单,解决方案也很简单。如果您想同时分配 100 列,则解决方案是无用的。 如果您有分配 100 列的优化解决方案,请随时分享。 @SpanishBoy 有点令人沮丧,这么多年过去了,仍然没有方便的语法。你能做的最好的就是一个 for 循环:for colname, data in zip(['col2', 'col3'], zip(*[(2, 3), (2, 3), (2, 3)])): df[colname] = data @shadowtalker,我认为有更好的方法来做到这一点..您可以将数据框分配给df[['col2', 'col3']],请参阅我的答案。

以上是关于为 Pandas 中的多列赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python将pandas数字向量列拆分为多列[重复]

在 Python Pandas 中删除多列中的所有重复行

在 Python Pandas 中删除多列中的所有重复行

将json行数据划分为pandas数据框的多列[重复]

Pandas:基于多列索引连接两个时间序列数据[重复]

一次在多列上使用 pandas groupby().apply(list) [重复]