用三列中的分组问题创建一个数据框

2024-05-23 20:14:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

       A               B                  C
  I am motivated     Agree                4
  I am motivated     Strongly Agree       5
  I am motivated     Disagree             6
  I am open-minded   Agree                4
  I am open-minded   Disagree             4
  I am open-minded   Strongly Disagree    3

其中A栏是问题,B栏是答案,C栏是A栏中问题“强烈同意”、“同意”、“不同意”和“强烈不同意”的频率

如何将其转换为以下数据帧?你知道吗

                  Strongly Agree    Agree     Disagree   Strongly Disagree
I am motivated        5               4           6             0
I am open-minded      0               4           4             3

我试着在groupby()中查找其他帖子中的列,但没有找到答案。使用python 3


Tags: 数据答案openam帖子频率groupbystrongly
2条回答

使用DataFrame.pivot_table()方法:

In [250]: df.pivot_table(index='A', columns='B', values='C', aggfunc='sum', fill_value=0)
Out[250]:
B                 Agree  Disagree  Strongly Agree  Strongly Disagree
A
I am motivated        4         6               5                  0
I am open-minded      4         4               0                  3

因为这些已经是频率计数了,所以我们可以假设我们有唯一的Question/Opinion对。因此,我们可以使用set_indexunstack,因为不需要聚合。这将节省我们一些时间和效率。我们可以用pivot来实现同样的目标,但是pivot没有一个fill_value选项来保存dtype

df.set_index(['A', 'B']).C.unstack(fill_value=0)

B                 Agree  Disagree  Strongly Agree  Strongly Disagree
A                                                                   
I am motivated        4         6               5                  0
I am open-minded      4         4               0                  3

额外学分 'B'转换为^{},列将被排序

df.B = pd.Categorical(
    df.B, ['Strongly Disagree', 'Disagree', 'Agree', 'Strongly Agree'], True)
df.set_index(['A', 'B']).C.unstack(fill_value=0)

B                 Strongly Disagree  Disagree  Agree  Strongly Agree
A                                                                   
I am motivated                    0         6      4               5
I am open-minded                  3         4      4               0

相关问题 更多 >