gpt4 book ai didi

python - 从 pandas 列表列创建堆栈

转载 作者:行者123 更新时间:2023-12-02 01:31:07 24 4
gpt4 key购买 nike

我在从以下 df 构建堆栈时遇到问题:

import pandas as pd

df = pd.DataFrame(
{
"Student": ['Daphne','Scooby','Daphne','Shaggy','Fred','Daphne'],
"window": [['Fred'],['Daphne'], [''], ['Daphne'],['Velma','Scrappy'],['Velma','Fred']]
}
)

它给你:

  Student            window
0 Daphne [Fred]
1 Scooby [Daphne]
2 Daphne []
3 Shaggy [Daphne]
4 Fred [Velma, Scrappy]
5 Daphne [Velma, Fred]

我想创建一个堆栈表来显示每个学生在窗口中看到其他学生的次数。我希望最终结果是这样的:

        Daphne  Fred  Scrappy  Velma
Daphne 0 2 0 1
Fred 0 0 1 1
Scrappy 0 0 0 0
Velma 0 0 0 0

我想我可以做这样的事情:

dfd = pd.get_dummies(df["window"].dropna().apply(pd.Series).stack())

它给你:

     Daphne  Fred  Scrappy  Velma
1 0 1 0 0 0
2 0 0 0 0 0
3 0 1 0 0 0
4 0 0 0 0 1
1 0 0 1 0
5 0 0 0 0 1
1 0 1 0 0

一旦我实现了,这不会给我我想要的结果:

xrf_df = dfd.T.dot(dfd)

这给了你

            Daphne  Fred  Scrappy  Velma
1 0 0 0 0
Daphne 0 2 0 0 0
Fred 0 0 2 0 1
Scrappy 0 0 0 1 1
Velma 0 0 1 1 2

我正在考虑用它来删除空白:

dfd = dfd.drop(0)
del dfd['']

但即使这样也无法在正确的列中给出正确的数字。

有人可以告诉我我做错了什么吗?

最佳答案

解决这个问题的一种方法,

df.explode('window').pivot_table(index='Student', columns='window', aggfunc='size', fill_value=0)

O/P;

window      Daphne  Fred  Scrappy  Velma
Student
Daphne 1 0 2 0 1
Fred 0 0 0 1 1
Scooby 0 1 0 0 0
Shaggy 0 1 0 0 0
  • 分解窗口列以删除列表
  • 以列为窗口、索引为学生、计数为聚合函数执行透视,最后用 0 填充 nan ​

关于python - 从 pandas 列表列创建堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73251880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com