Функция для создания нового df путем подсчета вхождений по разным значениям из нескольких столбцов - PullRequest
0 голосов
/ 18 февраля 2019

Цель:

Я хотел бы написать функцию, которая позволяет мне передавать несколько столбцов в моем args, а затем подсчитывать количество вхождений для каждого отдельного значения и в конечном итоге вставлятьрезультат в новом DataFrame.

Например, следуя схеме, приведенной ниже, я хотел бы посчитать, сколько раз оценки 1,2,3,4,5 из столбца a, b, cпроизошло:

+---+---+---+---+---+
| a | b | c | d | e |
+---+---+---+---+---+
| 1 | 2 | 1 | 3 | 4 |
+---+---+---+---+---+
| 1 | 2 | 2 | 4 | 5 |
+---+---+---+---+---+
| 1 | 3 | 2 | 2 | 4 |
+---+---+---+---+---+
| 5 | 5 | 2 | 2 | 3 |
+---+---+---+---+---+
| 1 | 4 | 4 | 2 | 5 |
+---+---+---+---+---+

Код:

Я пробовал следующее, но это не работает

 new_df['a_count'] = df.groupby('a').size()
 new_df['b_count'] = df.groupby('b').size()
 new_df['c_count'] = df.groupby('c').size()

Как я могу заставить это работать какодна функция, которая позволяет пользователю одновременно передавать несколько столбцов?

1 Ответ

0 голосов
/ 18 февраля 2019

Вы можете попробовать использовать pd.Series.value_counts():

# Mock df
df = pd.DataFrame({key:np.random.randint(1, 6, 5) for key in "abcde"})
   a  b  c  d  e
0  5  5  2  4  5
1  1  1  2  3  4
2  1  1  1  4  4
3  2  1  1  1  4
4  5  2  4  5  3

cols = ["a", "b", "c"]
new_df = pd.concat([df[c].value_counts() for c in cols], 1).fillna(0).astype(int)
print(new_df)
   a  b  c
1  2  3  2
2  1  1  2
4  0  0  1
5  2  1  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...