python - 如何计算两个 Pandas 时间轴向量之间的 PIL 逊相关性

标签 python pandas dataframe timeline

我有一个社交网络中的用户帖子数据库,我使用 Pandas DataFrame 计算了每个用户每月的帖子数量,这为每个用户生成了一个包含月份和帖子数量的 2 列表。我想计算不同用户之间的每月计数相关性,知道每个两个用户之间的每月时间线不同(有一些相交的月份)

这是创建月度时间表(agg)的代码

# Create an empty dataframe
df = pd.DataFrame()
# Create a column from the datetime variable
df['datetime'] = date_list
# Convert that column into a datetime datatype
df['datetime'] = pd.to_datetime(df['datetime'])
# Set the datetime column as the index
df['score'] = count
df.index = df['datetime'] 
# this is the table containing posts count for each month
agg = df['score'].resample('M').sum().to_frame()

所以基本上我必须在两个“聚合”变量上应用相关函数,但找不到一种直观的方法来做到这一点。 以下是属于两个不同用户的 agg 变量的两个示例:

第一列:月份,第二列:帖子数量

User A 
2018-04-30     39
2018-05-31     41
2018-06-30     19
2018-07-31     46
2018-08-31     61
2018-09-30     57
2018-10-31     33
2018-11-30     18

User B:
2017-11-30      0
2017-12-31      3
2018-01-31      0
2018-02-28      0
2018-03-31      22
2018-04-30      3
2018-05-31      11

最佳答案

这里是微积分 PIL 逊相关的解决方案:

import pandas as pd
data = """    
datetime     score 
2018-04-30     39
2018-05-31     41
2018-06-30     19
2018-07-31     46
2018-08-31     61
2018-09-30     57
2018-10-31     33
2018-11-30     18
    """
    datb = """    
datetime      score 
2017-11-30      0
2017-12-31      3
2018-01-31      0
2018-02-28      0
2018-03-31      22
2018-04-30      3
2018-05-31      11
        """
dfa = pd.read_csv(pd.compat.StringIO(data), sep='\s+')
dfb = pd.read_csv(pd.compat.StringIO(datb), sep='\s+')
dfa['datetime'] = pd.to_datetime(dfa['datetime'])
dfb['datetime'] = pd.to_datetime(dfb['datetime'])
dfa.index = dfa['datetime']
dfb.index = dfb['datetime']

agga = dfa['score'].resample('M').sum().to_frame()
aggb = dfb['score'].resample('M').sum().to_frame()
print(agga,aggb)

#intersection of 2 dataframes on datetime
inter = agga.merge(aggb, on='datetime')
print(inter)
result = inter['score_x'].corr(inter['score_y'])
print(result)

 dfa
           score
datetime         
2018-04-30     39
2018-05-31     41
2018-06-30     19
2018-07-31     46
2018-08-31     61
2018-09-30     57
2018-10-31     33
2018-11-30     18

 dfb
             score
datetime         
2017-11-30      0
2017-12-31      3
2018-01-31      0
2018-02-28      0
2018-03-31     22
2018-04-30      3
2018-05-31     11

 inter
            score_x  score_y
datetime                    
2018-04-30       39        3
2018-05-31       41       11

 result
0.9999999999999999

如果要使用联合:

union = pd.merge(agga, aggb, on='datetime', how='outer').fillna(0)

联合的输出:

                score_x  score_y
datetime                    
2018-04-30     39.0      3.0
2018-05-31     41.0     11.0
2018-06-30     19.0      0.0
2018-07-31     46.0      0.0
2018-08-31     61.0      0.0
2018-09-30     57.0      0.0
2018-10-31     33.0      0.0
2018-11-30     18.0      0.0
2017-11-30      0.0      0.0
2017-12-31      0.0      3.0
2018-01-31      0.0      0.0
2018-02-28      0.0      0.0
2018-03-31      0.0     22.0

一个很好的理解链接merge

关于python - 如何计算两个 Pandas 时间轴向量之间的 PIL 逊相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55470611/

相关文章:

Javascript 和 Python 变量差异

python - 构建时选择 GCC 版本 ( setup.py )

python - python中的count方法不能忽略空字符串

python - 如何计算具有多个逗号分隔值的列中某个单词的实例数?

python - 为什么使用 Python 异步读取和调用文件中的 API 比同步慢?

python - 如何禁用多行选择 Bokeh 数据表

python - 如何根据不同的数据帧部分绘制(plotly.express)多条线

python - 使用基于条件的字典替换 python 数据框中的列值

r - 如何使用 ggplot 创建两个表的 geom_bar

r - 按 R 中的分隔符行拆分数据框