#python #pandas
Вопрос:
я много пытался найти решение этой проблемы, прежде чем получить помощь по этому вопросу, на который здесь так много ответов. Но даже попробовав некоторые решения, я не смог их решить.
У меня есть код, который проверяет рейтинг ключевых слов в Google и возвращает CSV. Каждый день я получаю данные, но теперь я хочу сравнить фрейм данных с сегодняшнего/вчерашнего дня и посмотреть, было ли ключевое слово вверх или вниз.
Как я могу сравнить Rank int и проверить, сколько изменений было в ключевой работе?
печать(«Сегодня аларгадор 6 мм на орелье: 1 позиция»)
печать(«Сегодня аларгадор 8 мм на орелье: -3 позиция»)
Спасибо!
Rank Device Time
Keyword
alargador 18mm 42 desktop 2021-06-10
alargador 6mm na orelha 29 desktop 2021-06-10
alargador 8mm na orelha 28 desktop 2021-06-10
alargador caracol 18 desktop 2021-06-10
alargador de madeira 11 desktop 2021-06-10
Rank Device Time
Keyword
alargador 18mm 42 desktop 2021-07-10
alargador 6mm na orelha 28 desktop 2021-07-10
alargador 8mm na orelha 31 desktop 2021-07-10
alargador caracol 18 desktop 2021-07-10
alargador de madeira 11 desktop 2021-07-10
Мой код:
import glob
import pandas as pd
from datetime import date
from datetime import datetime, timedelta
path = r"C:Users...CSV*.csv"
def print_full(x):
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 2000)
pd.set_option('display.float_format', '{:20,.2f}'.format)
pd.set_option('display.max_colwidth', None)
print(x)
pd.reset_option('display.max_rows')
pd.reset_option('display.max_columns')
pd.reset_option('display.width')
pd.reset_option('display.float_format')
pd.reset_option('display.max_colwidth')
today = date.today()
yesterday = (datetime.now()-timedelta(days=1)).strftime("%Y-%d-%m")
d1 = today.strftime("%Y-%d-%m")
d2 = yesterday
print("Today's date:", d2)
df = pd.concat(map(pd.read_csv, glob.glob(path)))
df1 = df.drop('URL', axis=1)
df1['Time'] = pd.to_datetime(df['Date'], utc=False)
df2 = df1.drop('Date', axis=1)
df2.set_index('Keyword', inplace=True)
df3 = df2[df2.Time == d2]
df4 = df2[df2.Time == d1]
print_full((df3).head(5))
print_full((df4).head(5))
Комментарии:
1. Обновите свой вопрос с ожидаемым результатом
Ответ №1:
Если у вас есть 2 кадра данных, один за вчерашний день и один за сегодняшний:
>>> df1
Rank Device Time
Keyword
alargador 18mm 42 desktop 2021-06-10
alargador 6mm na orelha 29 desktop 2021-06-10
alargador 8mm na orelha 28 desktop 2021-06-10
alargador caracol 18 desktop 2021-06-10
alargador de madeira 11 desktop 2021-06-10
>>> df2
Rank Device Time
Keyword
alargador 18mm 42 desktop 2021-07-10
alargador 6mm na orelha 28 desktop 2021-07-10
alargador 8mm na orelha 31 desktop 2021-07-10
alargador caracol 18 desktop 2021-07-10
alargador de madeira 11 desktop 2021-07-10
out = df1['Rank'].sub(df2['Rank']).loc[lambda x: x != 0].to_frame()
print(out)
# Output:
Rank
Keyword
alargador 6mm na orelha 1
alargador 8mm na orelha -3
Обновить
Если ранг один и тот же, покажите одно и то же значение
Просто удалите .loc
деталь:
out = df1['Rank'].sub(df2['Rank']).to_frame()
print(out)
# Output:
Rank
Keyword
alargador 18mm 0
alargador 6mm na orelha 1
alargador 8mm na orelha -3
alargador caracol 0
alargador de madeira 0
Комментарии:
1. сработало! могу я спросить тебя еще об одной вещи? если ранг один и тот же, покажите одно и то же значение
2. @Дугласоарес. Я обновил свой ответ.