Выведите строку столько раз, сколько ее значение, плюс один поднимается в других строках - PullRequest
2 голосов
/ 18 апреля 2019

Я хочу напечатать каждую строку в новом df (df2) в зависимости от того, сколько раз его imageno + 1 увеличивается. Таким образом, в приведенных ниже данных, строка 1 должна быть напечатана дважды (есть два 7), строка 2 дважды, строка 3 дважды, строка 4 один раз (есть один 8), строка 5 один раз, и т. Д.

import pandas as pd

print(df)
   x-position  y-position  imageno
1  220         220          6
2  627         220          6
3  620         220          6
4  220         220          7
5  628         220          7
6  621         220          8

df2 = pd.DataFrame(columns=['x-position', 'y-position', 'imageno'])

Ответы [ 2 ]

3 голосов
/ 18 апреля 2019

IIUC, создайте вспомогательный ряд, используя Series.value_counts, затем используйте Series.map, index.repeat и DataFrame.loc чтобы получить желаемый номер или повторений:

df = pd.DataFrame({'x-position': {1: 220, 2: 627, 3: 620, 4: 220, 5: 628, 6: 621}, 'y-position': {1: 220, 2: 220, 3: 220, 4: 220, 5: 220, 6: 220}, 'imageno': {1: 6, 2: 6, 3: 6, 4: 7, 5: 7, 6: 8}})

s = df['imageno'].value_counts()

df2 = df.loc[df.index.repeat(df['imageno'].add(1).map(s).fillna(0).astype(int))]

[вне]

   x-position  y-position  imageno
1         220         220        6
1         220         220        6
2         627         220        6
2         627         220        6
3         620         220        6
3         620         220        6
4         220         220        7
5         628         220        7
2 голосов
/ 18 апреля 2019

IIUC merge после настройки 'imageno'

df.assign(imageno=df.imageno+1).merge(df[['imageno']],on='imageno').assign(imageno=lambda x : x['imageno']-1)
Out[894]: 
   x-position  y-position  imageno
0         220         220        6
1         220         220        6
2         627         220        6
3         627         220        6
4         620         220        6
5         620         220        6
6         220         220        7
7         628         220        7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...