В настоящее время я пытаюсь изменить значения столбца панды в зависимости от значения другого столбца. Пока проблем нет, но я хотел бы перебрать оба столбца, чтобы установить свои таблицы, как в примере ниже:
У меня есть такая таблица панды:
id id2
1 0
1 0
1 0
2 0
2 0
2 0
...
Хотелось бы получить примерно такое:
id id2
1 1
1 2
1 3
2 1
2 2
2 3
...
Поэтому мне как-то нужно проверить значение столбца id и в зависимости от него изменить значения id2. Пока у меня есть только это:
n=1
m=50
df.loc[df.id==n, 'id2'] = m
Это дает мне следующий результат, но это не совсем то, что я пытаюсь сделать:
id id2
1 50
1 50
1 50
2 50
2 50
2 50
Я новичок в программировании, и все циклы, которые я пробовал, потерпели неудачу. Я был бы очень благодарен, если бы кто-нибудь объяснил мне, как это сделать!






Используйте cumsum () с groupby ()
df = pd.DataFrame({'id':[1,1,1,2,2,2], 'id2':[0,0,0,0,0,0]})
df['id2'] =1
df['id2'] = df.groupby('id')['id2'].cumsum()
print(df)
Выход:
id id2
0 1 1
1 1 2
2 1 3
3 2 1
4 2 2
5 2 3
Большое спасибо, это именно то, что я искал!
есть ли способ начать с 0, а не с 1?
@Mauritius, вы можете использовать add(-1) как df['id2'] = df.groupby('id')['id2'].cumsum().add(-1)
возможно, метод DataFrame.rank() - это то, что вам нужно.
Примеры:
import pandas as pd
df = pd.DataFrame({'id1':[1,1,1,2,2,2,3,3],'id2':[0,0,0,0,0,0,0,0]})
df['dummy_rank'] = df['id2'].groupby(df['id1']).rank(method='first').apply(int)
Ключевым моментом является аргумент «метод», вы можете узнать больше с помощью документа pandas.
Если вы используете
.loc, все должно быть в порядке. Я не понимаю, что результат не такой, как хотелось бы. Как ты это сделал? Цикл поn, т.е. диапазон (10)? Вы меняли значениеm? Потому что, если вы этого не сделаете, то каждый раз при повторении цикла соответствующийnбудет изменен, но на тот же50.