我想计算分组后的共现百分比。我无法确定这样做的最佳方法。我可以想办法强制解决问题,但这意味着许多硬编码计算可能会随着更多源数据的增加而中断。必须有一个更优雅的方法,但我没有看到它。我很感激任何建议。
(可能与Python Pandas check if a value occurs more then once in the same day有点相似)
目标:分组后数据列的共现百分比表。 例如:当A发生时,在1月份发现B的时间为45%。当A发生时,第6周发现C的时间为21%。
样本数据(df):
Date ID Region Event
1/01/2016 1001 S C
1/01/2016 1001 S D
1/01/2016 1001 N E
1/01/2016 1002 E D
1/02/2016 1003 E A
1/04/2016 1005 N B
1/04/2016 1005 N B
1/04/2016 1005 N B
1/04/2016 1006 N A
1/04/2016 1006 N F
2/12/2016 1008 E C
2/12/2016 1008 E B
要计算百分比,我需要查找具有相同ID的事件。因此,对于整个数据集C,当B为50%时,B分离为50%,所有其他为0%。但是,如果我按月分组,则B分离为1月为100%,B为2为100时为100。
目前,我有使用.isin和.drop_duplicates的代码来查找和减少列表:
b_ids = df[df.Event == 'B'].ID.drop_duplicates()
x = len(b_ids)
c_when_b = df[(df.ID.isin(b_ids)) & (df.Event == 'C')].ID.drop_duplicates()
y = len(c_when_b)
pct_cb = float(x)/y
问题:
编辑: 对于绘图的给定时间分组,预期输出将是每个事件的多列系列(忽略这些实际数字):
EVENT A
A B C ...
1 96.19 1.23 2.22
2 96.23 1.56 1.12
3 95.24 2.58 3.02
4 78.98 20.31 1.11
... .... ... ...
EVENT B
A B C ...
1 96.19 1.23 3.33
2 96.23 1.56 1.08
3 95.24 2.58 1.78
4 78.98 20.31 5.12
... .... ... ...
答案 0 :(得分:0)
我想你想要交叉表:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.crosstab.html
这将为您提供原始频率。然后,您可以将每个单元格除以出现的总数,以获得联合概率。
编辑:我正在更彻底地阅读您的问题,而且我认为您需要进行大量的数据争论,而不仅仅是在原始数据集上扔pdssrosstabs。例如,您可能想要创建一个新列df [' Week'],这只是基于df [' Date']的1- #Weeks值。但是这个问题有点老了,所以也许你已经想到了这个问题。