Умножьте строки и добавьте их к значению ячейки - PullRequest
0 голосов
/ 04 мая 2018

Рассмотрим следующий кадр данных;

df = pd.DataFrame(
          {'X':('a','b','c','d'),
           'Y':('a','b','d','e'),
           'Z':('a','b','c','d'),
           '#':(1,2,1,3)
                })
df

enter image description here

Я хотел бы добавить строки с цифрой выше 1 в столбце '#' с цифрой в этой строке минус 1. Предпочтительно, чтобы df тогда выгляди так:

enter image description here

В качестве альтернативы это может выглядеть так (строки умножены полностью);

enter image description here

Кстати, я много раз искал эту проблему, но не могу найти ничего, что помогло бы мне в правильном направлении.

1 Ответ

0 голосов
/ 04 мая 2018

Использование numpy.repeat:

c = df.columns[1:]
df = pd.DataFrame(np.repeat(df.values, df['#'], axis=0)[:, 1:], columns=c)
print (df)
   X  Y  Z
0  a  a  a
1  b  b  b
2  b  b  b
3  c  d  c
4  d  e  d
5  d  e  d
6  d  e  d

Аналогично:

df = pd.DataFrame(np.repeat(df.values, df['#'], axis=0), columns=df.columns)
print (df)
   #  X  Y  Z
0  1  a  a  a
1  2  b  b  b
2  2  b  b  b
3  1  c  d  c
4  3  d  e  d
5  3  d  e  d
6  3  d  e  d

Но если важен порядок:

dfs = []
for i in range(df['#'].max()):
    df = df[df['#'] > 0].copy()
    df['#'] -= 1
    dfs.append(df.iloc[:, 1:])

df1 = pd.concat(dfs, ignore_index=True) 
print (df1)
   X  Y  Z
0  a  a  a
1  b  b  b
2  c  d  c
3  d  e  d
4  b  b  b
5  d  e  d
6  d  e  d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...