映射/绘制一维数组/系列中值的距离
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 来自您试图在数据帧上执行我的代码。您可能没有名为“值”的列。设置你的数据框,这样它就可以了。 是的,你对一切都是正确的,这非常好。再次感谢。以上是关于映射/绘制一维数组/系列中值的距离的主要内容,如果未能解决你的问题,请参考以下文章