Свертывание фрейма данных PANDAs в единый столбец всех элементов и их вхождений - PullRequest
1 голос
/ 07 октября 2019

У меня есть фрейм данных, состоящий из смеси NaN и строк, например,

data = {'String1':['NaN', 'tree', 'car', 'tree'],
        'String2':['cat','dog','car','tree'],
        'String3':['fish','tree','NaN','tree']}
ddf = pd.DataFrame(data)

Я хочу

1: подсчитать общее количество элементов и поместить в новый фрейм данныхнапример,

      NaN=2
      tree=5
      car=2
      fish=1
      cat=1
      dog=1

2: подсчитать общее количество элементов по сравнению с отдельным более длинным списком (столбцом другого фрейма данных, например,

df['compare'] =
      NaN
      tree
      car
      fish
      cat
      dog
      rabbit
      Pear
      Orange
      snow
      rain

Спасибо Джейсон

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

По первому вопросу:

from collections import Counter

data = {
    "String1": ["NaN", "tree", "car", "tree"],
    "String2": ["cat", "dog", "car", "tree"],
    "String3": ["fish", "tree", "NaN", "tree"],
}
ddf = pd.DataFrame(data)

a = Counter(ddf.stack().tolist())

df_result = pd.DataFrame(dict(a), index=['Count']).T

df = pd.DataFrame({'vals':['NaN', 'tree', 'car', 'fish', 'cat', 'dog', 'rabbit', 'Pear', 'Orange', 'snow', 'rain']})

df_counts = df.vals.map(df_result.to_dict()['Count'])

Это должно сделать:)

1 голос
/ 07 октября 2019

Вы можете использовать следующий код для подсчета элементов во всем фрейме данных.

import pandas as pd

data = {'String1':['NaN', 'tree', 'car', 'tree'],
        'String2':['cat','dog','car','tree'],
        'String3':['fish','tree','NaN','tree']}
df = pd.DataFrame(data)

def get_counts(df: pd.DataFrame) -> dict:
    res = {}
    for col in df.columns:
        vc = df[col].value_counts().to_dict()
        for k,v in vc.items():
            if k in res:
                res[k] += v
            else:
                res[k] = v
    return res

counts = get_counts(df)

Выход

>>> print(counts)
{'tree': 5, 'car': 2, 'NaN': 2, 'cat': 1, 'dog': 1, 'fish': 1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...