我有一个pandas dataframe f特定尺寸说:
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行将其放在剩下的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中的值创建一个数据框的形状,也无法找到分发它的方法。我仍在努力,但是会很感激专家的帮助/提示。
使用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()
使用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