Home > database >  How to select special rows from a dataframe and escape others iteratively?
How to select special rows from a dataframe and escape others iteratively?

Time:01-18

Let's assume there's a panda's data frame A, defined as follows:

df_A = pd.read_csv('A.csv') #read data

How to assign df_A to a new data frame df_B such that df_B selects m rows and drops n rows of df_A.

Concrete example: df_B selects 5 rows of df_A and escapes 3, selects the next 5 rows and escapes again 3, and so on.

CodePudding user response:

We can try:

df = pd.DataFrame(dict(zip(range(10), range(1, 11))), index=range(10))
s = pd.Series([True, False]).repeat(pd.Series({True : 5, False : 3}))
df[np.tile(s, int(np.ceil(len(df) / len(s))))[:len(df)]]

   0  1  2  3  4  5  6  7  8   9
0  1  2  3  4  5  6  7  8  9  10
1  1  2  3  4  5  6  7  8  9  10
2  1  2  3  4  5  6  7  8  9  10
3  1  2  3  4  5  6  7  8  9  10
4  1  2  3  4  5  6  7  8  9  10
8  1  2  3  4  5  6  7  8  9  10
9  1  2  3  4  5  6  7  8  9  10

CodePudding user response:

What you could do is itter over the rows with df_A.iterrows() and then add five rows to df_B with df_B.append()

something like this:

i_a = 0
i_b = 0
m = 5
n = 3

for index,row in df_A.itterrows():
    i_a  = 1
    if i_a >= m:
        i_b  = 1
       
        if i_b >= n:
            i_a = 0
            i_b = 0

        continue

    df_B.append(row)

this will perform decently well depending on how large your dataframe is

  •  Tags:  
  • Related