【发布时间】:2016-08-07 15:52:38
【问题描述】:
可能是一个愚蠢的问题,但我在两者之间感到困惑,并且在这种情况下如何有效地应用 groupby 的逻辑将不胜感激。
我有一个类似的数据框
id NAME TYPE SCORE title
123 DDLJ cat1 1-6 5
123 DDLJ cat1 9-10 25
123 DDLJ cat1 N 5
456 Satya cat2 9-10 1
456 Satya cat2 N 3
222 India cat2 1-6 1
我需要为一个 groupof (id NAME TYPE) 找出一个名为“cat_score”的列,其逻辑应该是“为该组 [标题为 SCORE(9-10) - 标题为 SCORE(1-6)] / [该组的标题总和] "
#ex for group 123, DDLJ cat1
cat score = (title at SCORE "9-10" - title at SCORE "1-6") / (Sum of title of that group)
= (25 - 5) / (35)
= 0.58
注意:: SCORE 有 3 种类型 ["9-10", "1-6", "N"]。因此,如果对于任何组,任何未找到的分数类别都应视为 0 或可以忽略。
我的最终数据框应该是这样的
id NAME TYPE SCORE title Cat_Score
123 DDLJ cat1 1-6 5 0.58
123 DDLJ cat1 9-10 25 0.58
123 DDLJ cat1 N 5 0.58
456 Satya cat2 9-10 1 0.34
456 Satya cat2 N 3 0.34
222 India cat2 1-6 1 -1
请提出建议。
我尝试了一组
s = round((int(df[(df['id']=='123') & (df['NAME'] == 'DDLJ') & (df['TYPE']=='cat1') & (df['SCORE']=='9-10')]['title'].values[0]) - int(df[(df['id']=='123') & (df['NAME'] == 'DDLJ') & (df['TYPE']=='cat1') & (df['SCORE']=='1-6')]['title'].values[0])) / (int(df['title'].sum())),2)
s = 0.58
但是对于所有组,我都对如何复制感到困惑。
【问题讨论】:
-
你能检查第二组的结果吗?不应该是
(1-0) / 4 = 0.25 -
@ayhan-是的,你是对的