将多个列添加到DataFrame并将它们设置为等于现有列

Gau*_*sal 6 python pandas

我想在a中添加多个列pandas DataFrame,并将它们设置为等于现有列.有一个简单的方法吗?在R我会做:

df <- data.frame(a=1:5)
df[c('b','c')] <- df$a
df
  a b c
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
Run Code Online (Sandbox Code Playgroud)

pandas此结果中KeyError: "['b' 'c'] not in index":

df = pd.DataFrame({'a': np.arange(1,6)})
df[['b','c']] = df.a
Run Code Online (Sandbox Code Playgroud)

Max*_*axU 5

你可以使用.assign()方法:

In [31]: df.assign(b=df['a'], c=df['a'])
Out[31]:
   a  b  c
0  1  1  1
1  2  2  2
2  3  3  3
3  4  4  4
4  5  5  5
Run Code Online (Sandbox Code Playgroud)

或者更有创意的方法:

In [41]: cols = list('bcdefg')

In [42]: df.assign(**{col:df['a'] for col in cols})
Out[42]:
   a  b  c  d  e  f  g
0  1  1  1  1  1  1  1
1  2  2  2  2  2  2  2
2  3  3  3  3  3  3  3
3  4  4  4  4  4  4  4
4  5  5  5  5  5  5  5
Run Code Online (Sandbox Code Playgroud)

另一种方案:

In [60]: pd.DataFrame(np.repeat(df.values, len(cols)+1, axis=1), columns=['a']+cols)
Out[60]:
   a  b  c  d  e  f  g
0  1  1  1  1  1  1  1
1  2  2  2  2  2  2  2
2  3  3  3  3  3  3  3
3  4  4  4  4  4  4  4
4  5  5  5  5  5  5  5
Run Code Online (Sandbox Code Playgroud)

注意:正如评论中提到的@Cpt_Jauchefuerst DataFrame.assign(z=1, a=1)将按字母顺序添加列 - 即首先a将添加到现有列然后z.

  • 值得注意的是,例如.`df = df.assign(c ='some_value',b ='some_value')`确实按字母顺序将列添加到原始数据帧.因此产生的数据帧将具有列abc而不是ac b. (2认同)