Учитывая следующее df
id val1 val2 val3
0 1 A A B
1 1 A B B
2 1 B C NaN
3 1 NaN B D
4 2 A D NaN
Я хотел бы суммировать значения в каждой группе id
для всех столбцов;однако мне нужно только посчитать значения, которые появляются в одной строке, поэтому ожидаемый результат:
id
1 B 4
A 2
C 1
D 1
2 A 1
D 1
Я могу сделать это с помощью
import pandas as pd
df.set_index('id').apply(lambda x: list(set(x)), axis=1).apply(pd.Series).stack().groupby(level=0).value_counts()
, но apply(...axis=1)
(и, возможно, apply(pd.Series)
) действительно убивает производительность в целом DataFrames
.Поскольку у меня небольшое количество столбцов, я думаю, что я мог бы просто проверить все попарные дубликаты, заменить один на np.NaN
, а затем просто использовать df.set_index('id').stack().groupby(level=0).value_counts()
, но это не похоже на правильный подход, когда количество столбцов становится большим,
Есть какие-нибудь идеи относительно более быстрого решения этой проблемы?