如何用重复列表将熊猫数据框的行(而不是列)分开?

时间:2019-04-30 03:35:06

标签: python pandas

我有一个数据框和一个列表:

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     |

3 个答案:

答案 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