我想在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)
你可以使用.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.