繁体   English   中英

Pandas 每第n行划分一次

[英]Pandas divide every nth row

我想使用每 5 行作为参考行( ref_row ),从这个ref_row开始划分这个ref_row并对接下来的 4 行做同样的事情。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
    
len = df.shape[0]

for idx in range(0,len,5):

    ref_row = df.iloc[idx:idx+1,:]

    for idx_next in range(idx,idx+5):

        df.iloc[idx_next:idx_next+1,:] = df.iloc[idx_next:idx_next+1,:].div(ref_row)

但是,除了ref_row ,我得到了所有的NaN

    A   B   C   D
0   1.0 1.0 1.0 1.0
1   NaN NaN NaN NaN
2   NaN NaN NaN NaN
3   NaN NaN NaN NaN
4   NaN NaN NaN NaN
... ... ... ... ...
95  1.0 1.0 1.0 1.0
96  NaN NaN NaN NaN
97  NaN NaN NaN NaN
98  NaN NaN NaN NaN
99  NaN NaN NaN NaN

知道有什么问题吗?

您可以在axis=0上使用np.repeat重复 DataFrame 的每第五行的数组,然后按元素将其与结果数组相除:

out = df.div(np.repeat(df[::5].to_numpy(), 5, axis=0))

Output:

           A         B         C         D
0   1.000000  1.000000  1.000000  1.000000
1   0.726190  0.359375  0.967742  1.644068
2   0.130952  0.046875  0.161290  0.406780
3   0.488095  0.312500  0.919355  0.305085
4   0.857143  0.203125  0.967742  0.525424
..       ...       ...       ...       ...
95  1.000000  1.000000  1.000000  1.000000
96  0.061224  1.400000  0.518519  0.882353
97  1.510204  1.300000  1.740741  5.588235
98  0.224490  2.100000  1.407407  0.294118
99  1.061224  1.400000  1.388889  3.411765

[100 rows x 4 columns]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM