У меня есть такой фрейм данных:
df = pd.DataFrame({'id': [1, 1, 1, 2, 2], 'C1': ['1A', '1B', '1C', '2A', '2B'], 'C2': [100, 200, 300, 400, 500]})
print(df)
id C1 C2
0 1 1A 100
1 1 1B 200
2 1 1C 300
3 2 2A 400
4 2 2B 500
Из этого фрейма данных, как мне получить несколько подмножеств для каждого значения 'id', например?
id C1 C2
0 1 1A 100
id C1 C2
0 1 1A 100
1 1 1B 200
id C1 C2
0 1 1A 100
1 1 1B 200
2 1 1C 300
id C1 C2
0 2 2A 400
id C1 C2
0 2 2A 400
1 2 2B 500
Я могу написать a для l oop, как показано ниже.
for id in df['id'].unique().tolist():
df1 = df[df['id'] == id]
for i in range(len(df1) + 1):
df1 = df1.head(i)
Есть ли эффективный способ сделать это, потому что у меня есть тысячи значения в столбце id.
Я пробовал использовать df.apply, но он работает только с одной строкой (с осью = 1).
Моя конечная цель - закончить с фреймом данных, как показано ниже (где C2 - это сумма значений в столбце C2 подмножества фреймов данных).
id 1A 1B 1C 2A 2B C2
0 1 1 0 0 0 0 100
0 1 1 1 0 0 0 300
0 1 1 1 1 0 0 600
1 2 0 0 0 1 0 400
1 2 0 0 0 1 1 900
Если I go с подходом для l oop, я могу сделать групповой 'id', столбец суммы 'C2' и перекрестная таблица на фрейме данных подмножества, полученном во внутреннем для l oop. Затем я могу наконец выполнить pd.concat для всех результатов кросс-таблицы подмножества. Но я не знаю, как это сделать эффективнее. Пожалуйста, предложите.