Панды: подсчет итогов для столбцов кадра данных, основанный на том, совпадают ли два элемента в строке - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу посчитать определенные значения, если другие значения в кадре данных совпадают.Вот пример моего формата df, настоящий df имеет гораздо больше строк и столбцов.Единственные значения, для которых мне нужно создать счетчики, это a, b, c или d.В любой комбинации столбца / строки нет коллекции значений.

df1 = 
item1   item2   item3   t1   t2   t3   ...
foo     foo     bar     a    a    b    ...
foo     bar     foo     c    a    c    ...
foo     bar     baz     a    b    c    ...
...     ...     ...     ...  ...  ...

Псевдокод, о котором я думаю (для каждой строки):

if df1[item1] = df1[item2]:
    add ONE to t if that column = 'a'
    add TWO to t if that column = 'b'
if df1[item1] = df1[item3]:
    add ONE to t if that column = 'c'
    add TWO to t if that column = 'd'

Дает вывод типа:

t1   2
t2   1
t3   3

Вывод должен быть общим для каждого столбца.Значения t указаны в тысячах, поэтому я не могу вручную указать t1, t2, t3 и т. Д.

1 Ответ

0 голосов
/ 18 сентября 2018

Предполагая, что ваш фрейм данных находится в df , сначала давайте переведем имена столбцов в переменную

cols = [c for c in df.columns if c.startswith('t')]

Теперь давайте сделаем первое разделение.

d = {'a': 1, 'b': 2}
sum1 = df.loc[df.item1 == df.item2][cols].applymap(lambda x: d.get(x, 0)).sum()

Теперь давайте сделаем второе разделение

d = {'c': 1, 'd': 2}
sum2 = df.loc[df.item1 == df.item3][cols].applymap(lambda x: d.get(x, 0)).sum()

Добавить к результату

result = sum1 + sum2
print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...