【问题标题】:Extract Uniques and loop提取唯一性并循环
【发布时间】:2018-05-25 21:21:18
【问题描述】:

我有一个如下所示的数据框:

   A  B          C
0  1  2  PRODUCT_1
1  3  2  PRODUCT_2
2  3  2  PRODUCT_4
3  3  2  PRODUCT_5
4  5  2  PRODUCT_1
5  3  2  PRODUCT_3

我想对每个独特的产品,使用 A 和 B 列执行模型预测,并存储相应的准确度。

unique = ["PRODUCT_1", ...] # unique products
accuracy
for i in unique:
    first_subset = ???  # all rows for product `i` - how do I implement this correctly?

X = first_subset[:, 0]
Y = first_subset[:, 1]

prediction_product_1 = model.predict(X)
accuracy_product_1 = np.sum( (prediction_product_1)/np.sum(Y) )    
accuracy.append([accuracy_product_1, PRODUCT_1])

如何在 Python 中实现第二点?

【问题讨论】:

  • 您的代码在哪里苦苦挣扎?
  • 仔细查看df.groupby。这会为每个唯一键生成组或更小的DataFrames
  • 我无法正确初始化循环并为最后一点创建框架,因为我不是高级编码员@cᴏʟᴅsᴘᴇᴇᴅ
  • 好的,你不能至少提供一个minimal reproducible example 与样本数据和输出吗?你正在和熊猫一起工作,不是吗?您如何在不提供任何信息的情况下获得答案?
  • here 是针对明确问题的更多提示

标签: python pandas group-by unique


【解决方案1】:

从 - 开始

df = pd.DataFrame(...) # your data 
df

   A  B          C
0  1  2  PRODUCT_1
1  3  2  PRODUCT_2
2  3  2  PRODUCT_4
3  3  2  PRODUCT_5
4  5  2  PRODUCT_1
5  3  2  PRODUCT_3

首先找到唯一的,使用

uniques = df.C.unique()

uniques
array(['PRODUCT_1', 'PRODUCT_2', 'PRODUCT_4', 'PRODUCT_5', 'PRODUCT_3'], dtype=object)

要从特定产品中获取所有行,我会使用 groupby 来执行此操作(因此,这里实际上不需要 uniques) -

acc = {}
for i, g in df.groupby('C'):
    X, y = g['A'], g['B']
    p = model.predict(X, y)

    acc[i] = (p == y).sum() / len(y)

基本上,对于每个组,调用model.predict 并将键值对附加到acc dict。

【讨论】:

  • 如何改用 numpy 来解决?
  • @AlessandroCeccarelli 如果您想要一个 numpy 的答案,请不要标记问题 pandas。此外,一个 numpy 解决方案可能没有那么高效或容易实现。
  • 好的,但是每当我尝试运行代码时,它都会在最后一行报告错误 acc[i] = ..." list assignment index out of range" ;可能是因为我还没有调用“追加”命令吗?
  • @AlessandroCeccarelli 没有,你看到循环的顶部了吗?我将acc 定义为{},而不是[]
猜你喜欢
  • 2017-04-22
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 2019-06-29
  • 2012-03-04
  • 1970-01-01
相关资源
最近更新 更多