我有一个数据框和一个列表:
df:
| | N_Friends | NFriends_Vacc |
|:-:|:---------:|:-------------:|
| 0 | 6 | 3 |
| 1 | 3 | 1 |
| 2 | 4 | 2 |
| 3 | 5 | 2 |
| 4 | 2 | 1 |
| 5 | 3 | 2 |
l:
l=[2,3]
我想用列表除以df的每一行,以便第一个元素除以2,第二个元素除以3,第三个元素除以2,依此类推。输出应如下所示:
df:
| | N_Friends | NFriends_Vacc |
|:-:|:---------:|:-------------:|
| 0 | 3 | 1.5 |
| 1 | 1 | 0.33 |
| 2 | 2 | 1 |
| 3 | 1.66 | 0.66 |
| 4 | 1 | 0.5 |
| 5 | 1 | 0.66 |
答案 0 :(得分:1)
IIUC
df[:]=df.values/np.array(l)
df
Out[194]:
N_Friends NFriends_Vacc
0 3.0 1.000000
1 1.5 0.333333
2 2.0 0.666667
3 2.5 0.666667
4 1.0 0.333333
5 1.5 0.666667
答案 1 :(得分:1)
使用itertools.cycle()
将列表循环为一个数据帧的长度,然后除以:
from itertools import cycle, islice
print(df.div(list(islice(cycle(l), len(df))),axis=0))
N_Friends NFriends_Vacc
0 3.000000 1.500000
1 1.000000 0.333333
2 2.000000 1.000000
3 1.666667 0.666667
4 1.000000 0.500000
5 1.000000 0.666667
答案 2 :(得分:1)
您可以创建一系列与df相同的长度,然后将数据帧除以该长度,
df.div(np.tile(l, len(df)//len(l)), axis = 'index').round(2)
N_Friends NFriends_Vacc
0 3.00 1.50
1 1.00 0.33
2 2.00 1.00
3 1.67 0.67
4 1.00 0.50
5 1.00 0.67