панды групповой - пользовательская функция - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть следующий фрейм данных, для которого я использую groupby и sum ():

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").sum()

Это приводит к следующему:

col1 col2   
A   6.0
B   15.0
C   0.0

Я хочу, чтобы C показывал NaN вместо0, так как все значения для C являются NaN.Как я могу сделать это?Применить () с лямбда-функцией?Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

для вызова суммы необходимо указать параметр skipna = False.

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sum.html

эта ссылка должна предоставить необходимую документацию, и я надеюсь, что она решит вашу проблему.

0 голосов
/ 27 февраля 2019

Благодаря @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
0 голосов
/ 27 февраля 2019

Используйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...