【问题标题】:Add meaning to values in an object为对象中的值添加含义
【发布时间】:2016-08-13 15:24:53
【问题描述】:

是否可以利用以下示例中的第三列来“展开”/解开例如中的值Python 中的 Pandas DataFrame 没有实际复制行? 所以如果我们有一个像这样的对象:

X   Y   Count
1   2   3
2   2   2
4   3   1

如果没有Count,我怎么能在这里赋予意义? 将行分解为Count * row,因为这似乎不是一个好的解决方案,因为它会使数据占用更多的内存空间。

所以我希望 DataFrame 看起来像这样:

X   Y   Count
1   2   1
1   2   1
1   2   1
2   2   1
2   2   1
4   3   1

【问题讨论】:

  • 我的问题实际上适用于任何编程语言
  • 我不明白你的问题。你说你想“传播”这些值(没有说这意味着什么),然后你说你想“赋予 Count 意义”(没有说这意味着什么),然后你说你想做 KNN 聚类。你真正想做的是什么?
  • @BrenBarn 我发现很难制定它。我希望count 列在进行 KNN 聚类或其他方面具有一定的意义。如果我们每行只有一个条目的值会更容易,但它们是基于 XY 相加的。有意义吗?
  • 您在寻找这样的东西吗? stackoverflow.com/questions/26777832/…
  • @ayhan 有点像,但我想尽可能避免重复数据,因为 greole 在 cmets 中指出

标签: python pandas machine-learning knn


【解决方案1】:

我认为你的意思是这样的:

new_df = df.loc[df.index.repeat(df['Count'])]

然后行df.loc[n] 重复df.Count[n] 次数。这与groupby 有点相反。

更新

我尝试了new_df['Count'] = 1,它引发了SettingWithCopyWarning,除非我明确复制:

new_df = df.loc[df.index.repeat(df['Count'])].copy()
new_df['Count'] = 1    # <- now it works without a warning

【讨论】:

  • 数据框非常大,可以不复制这样的数据吗?
  • 您可以使用df.loc[...],而无需创建新的数据框。但我不确定它是否重复行。
  • 是的,只需执行 df = df.loc[df.index.repeat(df['Count'])] 然后 df['Count'] = 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多