【问题标题】:Pandas: Add a scalar to multiple new columns in an existing dataframe [duplicate]Pandas:将标量添加到现有数据框中的多个新列[重复]
【发布时间】:2019-06-23 02:58:54
【问题描述】:

我最近回答了一个问题,其中 OP 在现有数据框 (link) 中查找具有多个不同值的多个列。而且相当简洁,但我认为不是很快。

最终我希望我能做这样的事情:

# Existing dataframe
df = pd.DataFrame({'a':[1,2]})

df[['b','c']] = 0

这会导致:

a   b   c
1   0   0
2   0   0

但它会引发错误。

有没有一种我想念的超级简单的方法来做到这一点?还是我之前发布的答案是最快/最简单的方法?

注意

我知道这可以通过循环或通过将标量分配给多个列来完成,但如果可能的话,我会尽量避免这种情况。假设 50 列或任何你不想写的数字:

df['b'], df['c'], ..., df['xyz'] = 0, 0, ..., 0

不重复:

建议的“可能重复”问题显示了分配给每一列的多个不同值。我只是想问是否有一种非常简单的方法可以将 单个标量值 分配给多个新列。答案可能是正确且非常简单的“否”——但值得知道,这样我就可以停止搜索了。

【问题讨论】:

  • 您对df.assign(**{k:0 for k in ["b", "c"]}) 满意吗? 编辑:我看到你的链接帖子中有这个。 AFAIK,除了我链接的帖子中的内容外,我认为没有其他方法,但我们将看看是否有任何熊猫专家有想法。
  • 我仍然认为这是一个骗局。它是单个标量值这一事实几乎没有什么区别(IMO)。 answer here 解释了为什么这种语法不起作用。
  • 我会告诉你的——这个解释确实提供了很多关于为什么我的语法不起作用的见解,但是 question 是不同的,因为意图是将单个标量值应用于多个新列。就像你说的那样,我想看看是否有人在完全杀死这篇文章之前有一些天才。
  • 适用于标量的轻微变化:df.assign(**dict.fromkeys(['b', 'c'], 0))。但是,同样,不确定这是否是您想要的。
  • @jpp - 如果没有更简单的方法,那可能是赢家。想知道韦斯等人是否。所有人都考虑过这一点,并决定没有必要将标量应用于数据帧。

标签: python pandas dataframe


【解决方案1】:

我想你想做

df['b'], df['c'] = 0, 0

【讨论】:

  • Nde - 感谢您的回答,但我希望为数据框分配一个标量值,而不是多个系列。我已经更新了我原来的问题。
【解决方案2】:

为什么不使用assign

df.assign(**dict.fromkeys(['b','c'],0))
Out[781]: 
   a  b  c
0  1  0  0
1  2  0  0

或者由d=dict(zip([namelist],[valuelist]))创建dict

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2021-11-09
    • 2019-08-22
    相关资源
    最近更新 更多