Агрегировать базу DataFrame по значениям списка - PullRequest
0 голосов
/ 10 июля 2020

У меня следующая проблема.

У меня есть список со строковыми значениями:

a = ['word1', 'word2', 'word3', 'word4', ..., 'wordN']

И у меня есть фрейм данных со значениями:

+--------------+----------+-----------+
| keywords | impressions  | clicks     | 
+--------------+----------+-----------+
| word1    | 1245523      |   12321231 |              
+--------------+----------+-----------+
| word2    | 4212321      |  12312312  |      
+--------------+----------+-----------+
........................................

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

Я пытался перебирать фрейм данных с помощью метода iterrows (), но в этой ситуации он не работает.

Ответы [ 3 ]

1 голос
/ 10 июля 2020

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

df = df[df['keywords'].isin(a)]

Затем вы должны использовать groupby для агрегирования результатов

df.groupby('keywords', as_index=False).sum()
0 голосов
/ 10 июля 2020

укажите df, затем вычтите столбцы, чтобы не суммировать ("keywords"), наконец, l oop по списку слов:

import pandas as pd

a = ['word1', 'word2']

df = pd.DataFrame([
    ["word1", 1245523, 12321231],
    ["word2", 4212321, 12312312]
],
columns=["keywords", "impressions", "clicks"]
)

col_list = list(df)
col_list.remove('keywords')

for word in a:
    df[word] = df[col_list].sum(axis=1)

print(df)

Возвращает:

  keywords  impressions    clicks     word1     word2
0    word1      1245523  12321231  13566754  13566754
1    word2      4212321  12312312  16524633  16524633
0 голосов
/ 10 июля 2020

Нашел способ:

b = []
for i in a:
  b.append((a, checking_data[checking_data['keywords'].str.contains(a)][['impressions', 'clicks']].sum().values[0], 
               checking_data[checking_data['keywords'].str.contains(a)][['impressions', 'clicks']].sum().values[1]))


groupedOne_df = pd.DataFrame.from_records(b, columns = ['keywords', 'impressions', 'clicks'])

Теперь вы можете создать pandas df из этих значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...