Python 熊猫:在一行中向数据帧添加多个列

Python 熊猫:在一行中向数据帧添加多个列,python,pandas,dataframe,Python,Pandas,Dataframe,我来自R背景&我想知道是否有一行代码可以像dplyr一样将几个新列添加到Pandas中现有的数据帧中。如果您有此代码: import pandas as pd df = pd.DataFrame({'a': range(1, 11)}) df['b'] = range(11, 21) df['c'] = range(21, 31) df['d'] = range(31, 40) df['e'] = range(41, 50) 有没有办法将所有列添加到一行df中? 我在R中想要的一个例子是:

我来自R背景&我想知道是否有一行代码可以像dplyr一样将几个新列添加到Pandas中现有的数据帧中。如果您有此代码:

import pandas as pd

df = pd.DataFrame({'a': range(1, 11)})

df['b'] = range(11, 21)
df['c'] = range(21, 31)
df['d'] = range(31, 40)
df['e'] = range(41, 50)
有没有办法将所有列添加到一行df中? 我在R中想要的一个例子是:

library(dplyr)

df <- data.frame('a' = 1:10)

df <- df %>% mutate(b = 11:20, c = 21:30, d = 31:40, e = 41:50)
库(dplyr)

df您只需将所有数据和关联的列名传递到pd.DataFrame中,就像对列“a”所做的那样,用逗号分隔

像这样:

df = pd.DataFrame({'a': range(1, 11), 'b' : range(11, 21)})
或添加到现有数据帧:

df = pd.DataFrame({'a': range(1,11)})
df = pd.concat([df, pd.DataFrame( {c: range(x, y) for c,x,y in [(chr(97+x), x*10+1, x*10+11) for x in range(1, 5)]})], axis=1)

正如其他人所指出的,您可以在dataframe的原始构造中构建所有列,但如果以后需要添加多个列,则可以通过多个声明来添加每个列:

df['b'], df['c'], df['d'], df['e'] = range(11, 21), range(21,31), range(31,41), range(41,51)

分配

df.assign(b=range(11,21), c=range(21,31), d=range(31,41))
有了字典,事情就更容易了:

# assume you get this from somewhere else
val_dict = {'b': range(11,21), 'c':range(21,31)}

df.assign(**val_dict)
注意
b
不是关键字参数的可能选择时,第二种方法是预期的,例如,使用空格
'ab'
检查以下内容:

>>来自datar.all导入f、tible、mutate
>>>df=tibble(a=f[1:10])
>>>变异(b=f[11:20],c=f[21:30],d=f[31:40],e=f[41:50])
a、b、c、d、e
0       1      11      21      31      41
1       2      12      22      32      42
2       3      13      23      33      43
3       4      14      24      34      44
4       5      15      25      35      45
5       6      16      26      36      46
6       7      17      27      37      47
7       8      18      28      38      48
8       9      19      29      39      49
9      10      20      30      40      50
我是这个包裹的作者

# assume you get this from somewhere else
val_dict = {'b': range(11,21), 'c':range(21,31)}

df.assign(**val_dict)