向DataFrame添加多列并将其设置为与现有列相等的列[英] Add multiple columns to DataFrame and set them equal to an existing column

本文是小编为大家收集整理的关于向DataFrame添加多列并将其设置为与现有列相等的列的处理方法,想解了向DataFrame添加多列并将其设置为与现有列相等的列的问题怎么解决?向DataFrame添加多列并将其设置为与现有列相等的列问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我想将多个列添加到 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

在 pandas 中,这会导致 KeyError: "['b' 'c'] not in index":

df = pd.DataFrame({'a': np.arange(1,6)})
df[['b','c']] = df.a
解决方案

你可以使用.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

或者更有创意的方法:

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

另一种解决方案:

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

注意:@Cpt_Jauchefuerst 在评论 DataFrame.assign(z=1, a=1) 中提到将按字母顺序添加列 - 即第一个 a 将添加到现有列,然后是 z.

本文地址:https://www.itbaoku.cn/post/1727918.html