【问题标题】:How to use pivot table / Groupby on dataframe如何在数据框上使用数据透视表/Groupby
【发布时间】:2023-02-22 00:18:49
【问题描述】:

我正在尝试做一个看似非常简单的任务。给定一个数据框:

data = {
    'lifestage': ['a', 'b', 'c', 'a', 'a', 'b'],
    'CC': [1, 1, 0, 1, 0, 0],
    'DC': [1, 0, 1, 0, 1, 0],
    'AC': [1, 1, 0, 1, 1, 1],
    'CASA': [1, 0, 0, 0, 1, 0],
    'Stage_1': [1, 0, 1, 0, 1, 0],
    'Stage_2': [0, 1, 0, 1, 0, 0],
    'Stage_3': [0, 0, 0, 1, 0, 1]
}

df1 = pd.DataFrame(data)

原始表格如下所示:

lifestage CC DC AC CASA Stage_1 Stage_2 Stage_3
a 1 1 1 1 1 0 0
b 1 0 1 0 0 1 0
c 0 1 0 0 1 0 0
a 1 0 1 0 0 0 1
a 0 1 1 1 1 0 0
b 0 0 1 0 0 0 1

这样输出看起来像这样

Lifestage Product Stage_1 Stage_2 Stage_3
a CC 1 0 1
a DC 2 0 0
a AC 2 0 1
a CASA 2 0 0
b CC 0 1 0
b DC 0 0 0
b AC 0 1 1
b CASA 0 0 0
c CC 0 0 0
c DC 1 0 0
c AC 0 0 0
c CASA 0 0 0

【问题讨论】:

  • 这是什么逻辑?我们不应该从你的输出中猜测,请明确
  • 你试过什么?你做了什么研究?我不确定如何立即执行此操作,但我知道一些应该有帮助的资源:文档:Reshaping and pivot tables,所以问题:How can I pivot a dataframe? 如果您遇到问题的特定方面,请edit澄清,包括标题;见How to Ask
  • @mozway FWIW,它好像它将 CC-CASA 列视为布尔值(或者可能是乘数)并对 Stage 列求和。
  • @wjandrea 是的,这就是我的想象(见我的回答),但这并不能完全产生提供的输出(另一个原因逻辑应始终明确提供)

标签: python pandas dataframe


【解决方案1】:

由于没有提供逻辑,我只能猜测。

我假设你想计算 Stages 中的 1s,对于 Lifestages 和 Products 也有一个 1:

(df1.melt(['lifestage', 'Stage_1', 'Stage_2', 'Stage_3'], var_name='Product')
    .loc[lambda d: d.pop('value').eq(1)]
    .groupby(['lifestage', 'Product']).sum()
    .unstack('Product', fill_value=0)
    .stack().reset_index()
)

输出:

   lifestage Product  Stage_1  Stage_2  Stage_3
0          a      AC        2        1        1
1          a    CASA        2        0        0
2          a      CC        1        1        1
3          a      DC        2        0        0
4          b      AC        0        1        1
5          b    CASA        0        0        0
6          b      CC        0        1        0
7          b      DC        0        0        0
8          c      AC        0        0        0
9          c    CASA        0        0        0
10         c      CC        0        0        0
11         c      DC        1        0        0

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    相关资源
    最近更新 更多