首页 > 解决方案 > Panda - 比较两个数据帧 - 验证 INT 差异并打印

问题描述

在获得有关此问题的帮助之前,我尝试了很多方法来找到解决方案,这里有很多答案。但即使尝试了一些我无法解决的解决方案。

我有一个代码可以检查关键词在谷歌上的排名并返回一个 CSV。每天我都会获取数据,但现在我想比较今天/昨天的数据框,看看关键字是上升还是下降。

如何比较 Rank int 并验证 keywork 有多少更改?

print('今天 al​​argador 6mm na orelha: +1 位置')
print('今天 al​​argador 8mm na orelha: -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))

标签: pythonpandas

解决方案


如果您有 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

推荐阅读