【问题标题】:Counting list items and storing in dataframe column corresponding to list item计算列表项并存储在与列表项对应的数据框列中
【发布时间】:2020-10-25 05:51:45
【问题描述】:

我正在尝试遍历 Pandas 数据框中的系列,并将列表项的计数存储在与每一行的项目同名的另一列中。该系列就像一个列表列表,所以基本上我试图将该列表列表转换为一个单热向量,但该向量中的每个项目都是一列。可以出现的项目数量有限。

以下是我的方法。它工作得很好,但它的速度很慢。我在此处发布此内容是为了尝试找到一种更好、更“pythonic”的方法。

N_Series = len(df.Category)
for i in range(N_Series):
    itemList = df.Category[i]
    N_List = len(itemList)
    for k,v in Counter(itemList).items():
         df[k][i] = v/N_List

以下是一个示例,Category 列是一个列表,可以看到相应的 one-hot 列保存列表中的项目数/项目数。

提前致谢!

【问题讨论】:

  • 您能添加一些示例输入/输出吗?谢谢
  • 我认为df[k][i] = v/N_List 行不通
  • @FrancisWebb 感谢您请求此编辑。希望这会有所帮助。
  • 请在您的问题中包含示例输入以及预期输出,作为文本,以便其他人可以轻松地复制它。
  • 现在清楚了`

标签: python python-3.x pandas list counter


【解决方案1】:

让我们试试explode + corsstab

s=df.Category.explode()
s=pd.crosstab(s.index,s,normalize='index')
df=df.join(s)

【讨论】:

  • 为什么 normalize=True 给出奇怪的值?换句话说,当 normalize 为 True 时返回什么,例如发送 1。
  • 如何获取每个项目的分布而不是归一化值?
  • @SambbhavGarg 更改为 pd.crosstab(s.index,s,normalize='index')
猜你喜欢
  • 2020-01-19
  • 2020-08-12
  • 2016-03-03
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多