Уведомление о безопасности. Это решение не должно использоваться в ситуациях, когда качество вашей случайности может повлиять на безопасность приложения. В частности,
rand()
иuniqid()
не являются криптографически защищенными генераторами случайных чисел . См. ответ Скотта для безопасной альтернативы.Если вам не нужно, чтобы он был абсолютно уникальным с течением времени:
md5(uniqid(rand(), true))
В противном случае (если вы уже определили уникальный логин для своего пользователя):
md5(uniqid($your_user_login, true))
Благодаря @piRSquared, @Alollz и @ anky_91:
Вы можете использовать без установки индекса и сброса индекса:
d = {'col1': ["A", "A", "A", "B", "B", "B", "C", "C","C"], 'col2': [1,2,3,4,5,6, np.nan, np.nan, np.nan]}
df = pd.DataFrame(data=d)
df.groupby("col1", as_index=False).sum(min_count=1)
Вывод:
col1 col2
0 A 6.0
1 B 15.0
2 C NaN
Используйте это:
df.groupby('col1').apply(pd.DataFrame.sum,skipna=False).reset_index(drop=True)
#Or --> df.groupby('col1',as_index=False).apply(pd.DataFrame.sum,skipna=False)
Без apply()
благодаря @piRSquared:
df.set_index('col1').sum(level=0, min_count=1).reset_index()
благодаря @Alollz: если вы хотите вернуть сумму групп, содержащих NaN, а не просто NaNs
df.set_index('col1').sum(level=0,min_count=1).reset_index()
Выход
col1 col2
0 AAA 6.0
1 BBB 15.0
2 CCC NaN
для вызова суммы есть параметр skipna = False.
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sum.html
эта ссылка должна предоставить необходимую документацию и я ожидаю, что это решит вашу проблему.