我有以下数据帧,我使用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函数应用()?任何帮助,将不胜感激。
感谢@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
调用sum并使参数skipna = False。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sum.html
该链接应该提供您需要的文档,我希望这将解决您的问题。