python - Panda - 比较两个数据帧 - 验证 INT 差异并打印
问题描述
在获得有关此问题的帮助之前,我尝试了很多方法来找到解决方案,这里有很多答案。但即使尝试了一些我无法解决的解决方案。
我有一个代码可以检查关键词在谷歌上的排名并返回一个 CSV。每天我都会获取数据,但现在我想比较今天/昨天的数据框,看看关键字是上升还是下降。
如何比较 Rank int 并验证 keywork 有多少更改?
print('今天 alargador 6mm na orelha: +1 位置')
print('今天 alargador 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))
解决方案
如果您有 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
推荐阅读
- ruby-on-rails - [部署域]:带有 Heroku 和 Namecheap 的 Rails 应用程序
- cordova - 离子 ios 包构建失败 - “找不到模块 '../cordova/platform 元数据'”
- c# - C# 替换方法中的正则表达式
- java - 如何从作为字符串提供的 XML 源代码创建 Drawable(或 XmlResourceParser 对象)?
- arrays - 在另一个 Swift 文件中使用返回值(字符串数组)
- pandas - 加权平均熊猫
- php - symfony 如何解析和使用注解
- javascript - Interact.js 可调整大小和可拖动不能一起工作
- c++ - #ifdef VALUE 与 #if defined (VALUE) 有什么区别
- reactjs - 通过 Spring Security 对身份验证做出反应。可能的 ?