#python #pandas
#python #pandas
Вопрос:
У меня есть фрейм данных pandas, как показано ниже:
id c1 c2 c3
1 5 text1 -4
2 8 text2 -1
1 4 text1 0
2 7 text2 -8
3 2 text3 -5
1 2 text1 -8
...
тогда это результат моего желания:
id c2 c3 c4 c5
1 text1 -4 0 -8
2 text2 -1 -8
3 text3 -5
...
, я попробовал этот фрагмент кода,
df.groupby(['id','c2']).cumcount().add(1).astype(str)
но это не сработало.
Ответ №1:
Использование GroupBy.cumcount
с DataFrame.set_index
и Series.unstack
с DataFrame.add_prefix
:
g = df.groupby(['id','c2']).cumcount().add(3)
df = df.set_index(['id','c2', g])['c3'].unstack().add_prefix('c').reset_index()
print (df)
id c2 c3 c4 c5
0 1 text1 -4.0 0.0 -8.0
1 2 text2 -1.0 -8.0 NaN
2 3 text3 -5.0 NaN NaN
При необходимости замените NaN
на 0
:
g = df.groupby(['id','c2']).cumcount().add(3)
df = df.set_index(['id','c2', g])['c3'].unstack(fill_value=0).add_prefix('c').reset_index()
print (df)
id c2 c3 c4 c5
0 1 text1 -4 0 -8
1 2 text2 -1 -8 0
2 3 text3 -5 0 0