Манипулирование данными - манипулирование смещением строк - PullRequest
0 голосов
/ 03 марта 2020

У меня есть Pandas DataFrame, и я хочу l oop через column 1, и если значение столбца равно vergleich, я сдвигаю ячейки строки один раз вправо.

Вот моя попытка:

for i,j in df.iterrows():
    if j[1]== "stringobject":
        df.shift(periods=1,axis=1)
print(df)

Когда я печатаю df, я не вижу никаких изменений. Пожалуйста, посоветуйте, как go об этом

Ответы [ 2 ]

1 голос
/ 03 марта 2020

IIU C, попробуйте это с помощью этого MCVE:

df = pd.DataFrame({'col1':[1,2,3,'A','A'],'col2':['A','A','A','Z','Z'], 'col3':['Z','Z','Z', np.nan, np.nan]})

#col1 col2 col3
#0    1    A    Z
#1    2    A    Z
#2    3    A    Z
#3    A    Z  NaN
#4    A    Z  NaN 

m = df['col1'] == 'A'
df[m] = df[m].shift(1, axis=1)

Выход:

  col1 col2 col3
0    1    A    Z
1    2    A    Z
2    3    A    Z
3  NaN    A    Z
4  NaN    A    Z
0 голосов
/ 03 марта 2020

Просто обрежьте этот кусок, добавьте первый столбец и объедините их обратно

verg = df.groupby(1).apply(lambda g: g if g.name != 'vergleigh' else g.T.shift(1).T)

Редактировать: Это немного странно, но g.T.shift(1).T работает, а g.shift(1, axis=1) - нет. Почему?

...