Я ищу пользовательскую функцию группировки, которая собирается группировать строки таким образом, что:
- Если есть какое-либо число и 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
После пользовательского группирования по 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()
С нетерпением жду вашей помощи!