数据框具有值列和唯一 ID 的列表,没有

时间:2021-02-10 11:30:06

标签: python pandas dataframe

我有一个数据框

C1      C2
abc1    def1
abc2    def2
abc3    def3

现在数据帧可以有大量的行,我有一个列表,它可以有很多值并遍历整个数据帧 - 假设它有 2 个值 列出 C3 ['d1','d2'] 所以基本上数据框必须看起来像这样

C1      C2     C3
abc1   def1    d1
abc2   def2    d1
abc3   def3    d1
abc1   def1    d2
abc2   def2    d2
abc3   def3    d2

现在我不想遍历整个数据帧,我现在正在做的像 after loop ,有没有更好的方法来实现这一点

不能硬编码列表中的值可以有很多值,不仅仅是2 一些示例列表 - ['d5','d6','d7'] 或任何 ['bla', 'abc' , 'abaaa']

所以必须以这样的方式编写代码,列表中有多少个值,它会多次将行与具有其值的另一列重复

1 个答案:

答案 0 :(得分:1)

对新列使用 concatnp.repeat

L = ['d5','d6','d7'] 

df = (pd.concat([df]*len(L), ignore_index=True)
        .assign(C3 = np.repeat(L, len(df))))
print (df)
     C1    C2  C3
0  abc1  def1  d5
1  abc2  def2  d5
2  abc3  def3  d5
3  abc1  def1  d6
4  abc2  def2  d6
5  abc3  def3  d6
6  abc1  def1  d7
7  abc2  def2  d7
8  abc3  def3  d7
    

或者使用带有 DataFrame.assign 的列表理解:

df = pd.concat([df.assign(C3 = i) for i in L], ignore_index=True)
print (df)

     C1    C2  C3
0  abc1  def1  d5
1  abc2  def2  d5
2  abc3  def3  d5
3  abc1  def1  d6
4  abc2  def2  d6
5  abc3  def3  d6
6  abc1  def1  d7
7  abc2  def2  d7
8  abc3  def3  d7