【发布时间】: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 - 如果没有更简单的方法,那可能是赢家。想知道韦斯等人是否。所有人都考虑过这一点,并决定没有必要将标量应用于数据帧。