python - Pandas:自定义分组功能
问题描述
我正在寻找一个自定义分组函数,该函数将以如下方式对行进行分组:
- 如果有任何数字和0,它将添加数字。
- 如果有两个数字(它们将始终相同),那么它将添加数字。
- 如果有一个 NaN 和一个 NaN,它将添加一个 NaN。
- 如果有一个数字和一个 NaN,它将添加该数字。
一个让事情更清楚的例子:
start_df = pd.DataFrame({"id": [1,1,2,2,3,3,4,4,4,5],
"foo": [4, 4, np.nan, 7, np.nan, np.nan, 0, 9, 9, 7],
"bar": [np.nan, np.nan, 0, 4, 0, 1, 6, 6, 0, 4]})
id foo bar
0 1 4.0 NaN
1 1 4.0 NaN
2 2 NaN 0.0
3 2 7.0 4.0
4 3 NaN 0.0
5 3 NaN 1.0
6 4 0.0 6.0
7 4 9.0 6.0
8 4 9.0 0.0
9 5 7.0 4.0
在自定义 group-by 之后id
:
result_df = pd.DataFrame({"id": [1,2,3,4,5], "foo": [4, 7, np.nan, 9, 7], "bar": [np.nan, 4, 1, 6, 4]})
id foo bar
0 1 4.0 NaN
1 2 7.0 4.0
2 3 NaN 1.0
3 4 9.0 6.0
4 5 7.0 4.0
我知道的一种解决方案是:
start_df.groupby("id").max().reset_index()
但这对我来说太慢了,因为我正在处理的数据框很大。另一方面,我无法使用此解决方案涵盖两个元素都是数字的极端情况:
start_df.groupby("id").sum(min_count=1).reset_index()
期待您的帮助!
解决方案
也许不是你想的那样,但这应该有效
start_df.groupby('id').max()
如果reset_index
您想将“id”带回列中,请使用。
推荐阅读
- python - SGC GUI 和 Pygame Widget 实现
- r - 如何在 r 中使用 heatmap.2 函数时编辑树状图
- javascript - 如何在不重复代码的情况下在 rmarkdown 中回显和执行 HTML / SVG?
- r - 两个回归方程ggplot r的位置
- c - 如何在 Python 中释放 C 函数中分配的内存
- android - Android Studio xml预览仅字体问题
- python - 如何使用一个列值作为键在数据框中创建一个嵌套的 json?
- python - 如何获取文件的路径而不是当前工作目录
- android - 如何在 Firebase 中实现 BETWEEN Sql 查询?
- nmap - 用于操作系统检测的 snort 规则