映射/绘制一维数组/系列中值的距离

Posted

技术标签:

【中文标题】映射/绘制一维数组/系列中值的距离【英文标题】:Mapping/plotting distance of values in 1 dimensional array/ series 【发布时间】:2016-09-04 10:40:39 【问题描述】:

我有一个类似这样的熊猫系列:

(['StartGame', 'TutorialEnded',  'FBConnect',
  'StartGame', 'Sale', 'FBConnect', 'InviteSent',
  'StartGame', 'Finish_1', 'Sale', 'Bought',
  'Finish_22',  'FBConnect', 'Finish_2',
  'TutorialEnded', 'Finish_18', ...])

我想绘制包含字符串Finish 的值与值sale 的出现之间的距离,看看两者之间是否有任何相关性,以及检查其他单词出现之间的相关性关于sale。换句话说,我可以使用我的系列中任何值的出现来预测附近sale 的出现吗?甚至绘制一条散点线,在其中我为每个值分配不同的颜色,这样我就可以感觉到它会有所帮助,但我不知道该怎么做。

【问题讨论】:

抱歉,怎么了?你为什么要删除你漂亮的question?我希望我给你一个好的答案,它不起作用?我很惊讶。 @jezrael 哦,对不起,我犯了一个小拼写错误,用了双等号。当我修复它时,它工作得很好。你想让我重新发布它以便你回答吗? 【参考方案1】:

设置

df = pd.DataFrame(['StartGame', 'TutorialEnded',  'FBConnect',
  'StartGame', 'Sale', 'FBConnect', 'InviteSent',
  'StartGame', 'Finish_1', 'Sale', 'Bought',
  'Finish_22',  'FBConnect', 'Finish_2',
  'TutorialEnded', 'Finish_18'], columns=['Value'])
df.index.name = 'position'
df.reset_index(inplace=True)

辅助函数

def isFinish(x):
    """Returns True if Value matches 'Finish', False otherwise."""
    return bool(re.match(r'.*Finish.*', x.ix['Value']))

def isSale(x):
    """Returns True if Value matches 'Sale', False otherwise."""
    return bool(re.match(r'.*Sale.*', x.ix['Value']))

df['Finish'] = df.apply(isFinish, axis=1)
df['Sale'] = df.apply(isSale, axis=1)
df['FinishCount'] = df.Finish.cumsum()

def cumargmax(x):
    """get latest position of a Finish row."""
    if x.ix['FinishCount'] == 0:
        return np.nan
    else:
        return df.FinishCount.loc[:x.ix['position']].argmax()

df['Distance'] = df.position - df.apply(cumargmax, axis=1)

演示

print df

    position          Value Finish   Sale  FinishCount  Distance
0          0      StartGame  False  False            0       NaN
1          1  TutorialEnded  False  False            0       NaN
2          2      FBConnect  False  False            0       NaN
3          3      StartGame  False  False            0       NaN
4          4           Sale  False   True            0       NaN
5          5      FBConnect  False  False            0       NaN
6          6     InviteSent  False  False            0       NaN
7          7      StartGame  False  False            0       NaN
8          8       Finish_1   True  False            1       0.0
9          9           Sale  False   True            1       1.0
10        10         Bought  False  False            1       2.0
11        11      Finish_22   True  False            2       0.0
12        12      FBConnect  False  False            2       1.0
13        13       Finish_2   True  False            3       0.0
14        14  TutorialEnded  False  False            3       1.0
15        15      Finish_18   True  False            4       0.0

或按销售时间划分

print df[df.Sale]

   position Value Finish  Sale  FinishCount  Distance
4         4  Sale  False  True            0       NaN
9         9  Sale  False  True            1       1.0

【讨论】:

@NANA 如果您使用的列表比您最初提供的更大,请提供该列表,因为我确信由于该数据中的一些细微差别而生成了“str”错误。我已经提供了你需要的所有代码。尝试复制并粘贴我的代码,看看它是否有效。如果是这样,那么我们可以消除版本问题。下一步是提供更多的回溯,而不仅仅是您拥有的少量。 @NANA 当我在设置部分明确指定“值”列时,KeyError 来自您试图在数据帧上执行我的代码。您可能没有名为“值”的列。设置你的数据框,这样它就可以了。 是的,你对一切都是正确的,这非常好。再次感谢。

以上是关于映射/绘制一维数组/系列中值的距离的主要内容,如果未能解决你的问题,请参考以下文章

将二维数组映射到一维数组

最小化最大距离,一维数组

如何从python中的两个一维数组中绘制相似度热图?

为啥我不能绘制不是标量、一维或 (2, n) 数组的东西?

性能差异一维数组映射方式问题 [关闭]

如何用python实现图像的一维高斯滤波