Python: переместить блок на ячейку данных - PullRequest
0 голосов
/ 19 февраля 2019

Я столкнулся с проблемой форматирования, когда требовалось смещение столбца, которое можно проиллюстрировать примерно так:

df =                     
    A    B    C    D    E
0    foo    spam    egg    0    0
1    bar    egg    1    0.84    NaN
2    bar    egg    2    0.91    NaN
3    foo    spam    egg    3    0.14
4    foo    spam    egg    4    -0.76

на это:

    df =                    
    A    B    C    D    E
0    foo    spam    egg    0    0.00
1    bar    spam    egg    1    0.84
2    bar    spam    egg    2    0.91
3    foo    spam    egg    3    0.14
4    foo    spam    egg    4    -0.76

Для которого я сделал следующее исправление:

columnShift = df.columns[-3:]
indexes = [i for i,x in enumerate(df.B) if x =='egg']

for i in indexes:
    for c in np.arange(1,len(columnShift)):
        df.loc[i,columnShift[-c]] = df.loc[i,columnShift[-(c+1)]]

Он функциональный, но чувствует себя не элегантно и занимает довольно много времени.Поэтому мне было интересно, есть ли лучшее решение для применения к большим фреймам данных.

1 Ответ

0 голосов
/ 19 февраля 2019

Если исходный df равен

df =                     
    A    B    C    D    E
0    foo    spam    egg    0    0
1    bar    egg    1    0.84    NaN
2    bar    egg    2    0.91    NaN
3    foo    spam    egg    3    0.14
4    foo    spam    egg    4    -0.76

Код ниже должен делать то, что вам нужно:

new_cols = [cols[0], cols[-1]] + cols[1:-1].tolist()
part = df.iloc[1:3, :][new_cols]
df.iloc[1:3, :] = part.values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...