pandas groupby - 自定义功能

问题描述 投票:3回答:3

我有以下数据帧,我使用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。我怎么能做到这一点?使用lambda函数应用()?任何帮助,将不胜感激。

python pandas pandas-groupby
3个回答
1
投票

感谢@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

3
投票

用这个:

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

1
投票

调用sum并使参数skipna = False。

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

该链接应该提供您需要的文档,我希望这将解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.