我有一个特定尺寸的熊猫数据框,说:
ID FACTOR LEVEL
160 SPM P
159 SPM2 S
851 ABS K
415 ABS P
202 ABS P
205 ABS2 Q
207 AQE T
我想做的是列出两个项目: X = ['GAB','YER']
所以我想做的是,我想将此项目作为新列(如NewCol)分配到列表中,并以与数据帧中行大小相同的特定频率进行分配。因此,在这种情况下,我有7行和2项,而7/2整数商为3,因此我想将第一个项放在3行中,而将下一个放在其余4行中。因此输出应为:
ID FACTOR LEVEL NewCol
160 SPM P GAB
159 SPM2 S GAB
851 ABS K GAB
415 ABS P YER
202 ABS P YER
205 ABS2 Q YER
207 AQE T YER
到目前为止,我能做的就是使用
创建一系列的两个元素 df_s = pd.DataFrame(X)
这给了我
0
GAB
YER
但是,我无法用带有X中值的数据框形状来以此创建系列,也无法找到分配它的方法。我仍在努力中,但请您多多指教。
答案 0 :(得分:3)
使用np.repeat
并将结果分配到新列:
arr = np.repeat(X, len(df) // len(X))
df['NewCol'] = pd.Series(arr, index=df.index[:len(arr)])
df
ID FACTOR LEVEL NewCol
0 160 SPM P GAB
1 159 SPM2 S GAB
2 851 ABS K GAB
3 415 ABS P YER
4 202 ABS P YER
5 205 ABS2 Q YER
6 207 AQE T NaN
如果要填充最后一个NaN,请使用
df['NewCol'] = df['NewCol'].ffill()
答案 1 :(得分:2)
使用clip
import numpy as np
n=len(X)
m=len(df)//n
s=pd.Series(np.arange(len(df))//m).clip_upper(n-1)
df['New']=s.map(dict(zip(s.unique(),X)))
df
Out[278]:
ID FACTOR LEVEL New
0 160 SPM P GAB
1 159 SPM2 S GAB
2 851 ABS K GAB
3 415 ABS P YER
4 202 ABS P YER
5 205 ABS2 Q YER
6 207 AQE T YER