Как объединить содержимое столбцов в кадре данных в Python? - PullRequest
0 голосов
/ 30 января 2020

Я новичок в python и датафреймах, поэтому мне интересно, знает ли кто-нибудь, как я могу выполнить sh следующее. У меня есть фрейм данных со многими столбцами, некоторые из которых имеют начало и имеют подчеркивание, за которым следует число (bird_1, bird_2, bird_3). Я хочу по существу объединить все столбцы, которые имеют начало, в единственные столбцы со всеми значениями, которые содержались в составных столбцах. Тогда я бы хотел запустить df[columns].value_counts для каждого.

Начальный кадр данных

Initial df

Конечный кадр данных

Final df

Для df[bird].value_counts() я бы получил 1 для AL
Для df[cat].value_counts(), я бы получил 3 для A, 4 для B , 1 для C

Конечная цель - получить количество уникальных значений для каждого типа столбца (птица, кошка, собака и т. Д. c.)

1 Ответ

0 голосов
/ 31 января 2020

Вы можете сделать:

df.columns=[col.split("_")[0] for col in df.columns]

df=df.unstack().reset_index(1, drop=True).reset_index()
df["id"]=df.groupby("index").cumcount()
df=df.pivot(index="id", values=0, columns="index")

Выходы:

index bird  cat
id
0        A    A
1        B    A
2        C    A
3        D    B
4        E    B
5        F    B
6        G    B
7        H    C
8        I  NaN
9        J  NaN
10       K  NaN
11       L  NaN

Оттуда получить подсчет всех возможных значений:

df.T.stack().reset_index(1, drop=True).reset_index().groupby(["index", 0]).size()

Выходы:

index  0
bird   A    1
       B    1
       C    1
       D    1
       E    1
       F    1
       G    1
       H    1
       I    1
       J    1
       K    1
       L    1
cat    A    3
       B    4
       C    1
dtype: int64
...