Добавьте pd.value_counts () и определенную переменную в строку кадра данных. - PullRequest
0 голосов
/ 14 мая 2018

Мне было немного сложно придумать простой пример, но я надеюсь, что это имеет смысл: у меня есть цикл, который генерирует мне переменную name и такой фрейм данных

name = 'store1'
exampledf = pd.DataFrame({'animal': ['bird', 'bird', 'dog', 'cat', 'cat', 'cat']})

Я могуиспользуйте exampledf['animal'].value_counts(), чтобы получить:

cat     3
bird    2
dog     1

Желаемым результатом является добавление name и значения к новому df, например, так:

store    cat    bird    dog
store1   3      2       1

Затем в следующем цикле произнеситеУ меня есть

name = 'store2'
exampledf = pd.DataFrame({'animal': ['cat', 'cat', 'bird', 'cat', 'cat', 'bird']})

Я хотел бы добавить это, чтобы получить:

store    cat    bird    dog
store1   3      2       1
store2   4      2       0

Надеюсь, это имеет смысл!

1 Ответ

0 голосов
/ 14 мая 2018

Давайте попробуем векторизовать это. Объедините ваши DataFrames, вызовите str.get_dummies и затем суммируйте по индексу.

df_list = [exampledf1, exampledf2]
names = [name1, name2]

(pd.concat(df_list, axis=0, keys=names)
   .animal
   .str.get_dummies()
   .sum(level=0)
)

        bird  cat  dog
store1     2    3    1
store2     2    4    0

Если ваши данные не в формате df_list & names, я настоятельно рекомендую найти способ их получения.


Альтернативой является вызов df.append для каждой итерации цикла. Я считаю, что это медленно и безобразно:

df = pd.DataFrame()

for d, n in zip(df_list, names):
    df = df.append(
        d.animal.value_counts().to_frame().T.set_index([[n]])
    )

df
        bird  cat  dog
store1     2    3  1.0
store2     2    4  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...