簡體   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