我有一个数据框
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']
所以必须以这样的方式编写代码,列表中有多少个值,它会多次将行与具有其值的另一列重复
答案 0 :(得分:1)
对新列使用 concat
和 np.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