Избегайте произвольного количества столбцов.
. Требуемый вывод предполагает, что у вас есть произвольное количество столбцов в зависимости от количества значений в 1
для каждой группы 0
.Это анти-панды, которые сильно ориентированы на произвольное число рядов .Следовательно, последовательных операций предпочтительнее.
Так что вы можете просто использовать groupby
+ sum
для хранения всей необходимой вам информации.
df = pd.DataFrame({0: ['2008-04_E.pdf']*3,
1: ['Mat1', 'Mat2', 'Mat2'],
2: [3, 1, 1]})
df_sum = df.groupby([0, 1]).sum().reset_index()
print(df_sum)
0 1 2
0 2008-04_E.pdf Mat1 3
1 2008-04_E.pdf Mat2 2
Но если вы настаиваете ...
Если вы настаиваете на своем необычном требовании, вы можете выполнить его следующим образом через df_sum
, рассчитанный, как указано выше.
key = df_sum.groupby(0)[1].cumcount().add(1).map('Key{}'.format)
res = df_sum.set_index([0, key]).unstack().reset_index().drop('key', axis=1)
res.columns = res.columns.droplevel(0)
print(res)
Key1 Key2 Key1 Key2
0 2008-04_E.pdf Mat1 Mat2 3 2