RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1590161
Accepted
vagiinalover
vagiinalover
Asked:2024-08-10 05:46:14 +0000 UTC2024-08-10 05:46:14 +0000 UTC 2024-08-10 05:46:14 +0000 UTC

熊猫。包含文本和数字字段值的数据透视表

  • 772

大家好!请帮忙。我有这个数据框:

df = pd.DataFrame({
    'sku_sellout': ['a', 'a', 'b', 'c', 'a'],
    'labels': ['менее 100%', '100-200%', 'более 200%', 'более 200%', 'менее 100%'],
    'price': [100, 200, 300, 1000, 100],
    'ranges': ['0-100', '100-200', '200-300', '900-1000', '0-100'],
    'rur_extr': [1, 2, 3, 4, 1],
    'qnt_extr': [10, 20, 30, 40, 15]
})
sku_售完 标签 价格 范围 鲁尔外部 qnt_extr
一个 低于100% 100 0-100 1 10
一个 100-200% 200 100-200 2 20
乙 超过200% 300 200-300 3 30
c 超过200% 1000 900-1000 4 40
一个 低于100% 100 0-100 1 15

我需要从中得到这个:

df2 = pd.DataFrame({
    'sku_sellout': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
    'metrics':['ranges', 'rur_extr','qnt_extr','ranges', 'rur_extr','qnt_extr','ranges', 'rur_extr','qnt_extr'],
    'менее 100%': ['0-100',2,25,None,None,None,None,None,None],
    '100-200%': ['100-200%',2,20,None,None,None,None,None,None],
    'более 200%': [None,None,None,'200-300',3,30,'900-1000',4,40]
})
sku_售完 指标 低于100% 100-200% 超过200%
一个 范围 0-100 100-200% 没有任何
一个 鲁尔外部 2 2 没有任何
一个 qnt_extr 25 20 没有任何
乙 范围 没有任何 没有任何 200-300
乙 鲁尔外部 没有任何 没有任何 3
乙 qnt_extr 没有任何 没有任何 30
c 范围 没有任何 没有任何 900-1000
c 鲁尔外部 没有任何 没有任何 4
c qnt_extr 没有任何 没有任何 40

那些。本质如下 - 行中有测量 sku_sellout 和指标(ranges、rur_extr、qnt_extr),列中有标签的值。十字路口处有:

  1. 如果是rur_extr或qnt_extr,则对应字段的和。
  2. 如果这是范围,则为此 sku_sellout 和标签找到的第一个值 (aggfunc='first') - 它将始终相同。

我通过melt 和pivot_table 完成了此操作,但无法将条件逻辑应用于该列:应用“first”或“sum”。

pandas
  • 1 1 个回答
  • 38 Views

1 个回答

  • Voted
  1. Best Answer
    Kirill Kondratenko
    2024-08-18T13:18:24Z2024-08-18T13:18:24Z

    看来分成两个总结然后合并起来会更容易

    # Разворачиваем
    temp = df.melt(
        id_vars=['sku_sellout', 'labels'],
        value_vars=['ranges', 'rur_extr', 'qnt_extr'],
        var_name='metrics')
    
    # Сводная для суммируемых столбцов
    extr = temp[
        temp['metrics'].isin(['rur_extr', 'qnt_extr'])].pivot_table(
        index=['sku_sellout', 'metrics'],
        columns='labels',
        values='value',
        aggfunc='sum')
    
    # Сводная для столбцов с первым значением
    ranges = temp[
        temp['metrics'] == 'ranges'].pivot_table(
        index=['sku_sellout', 'metrics'],
        columns='labels',
        values='value',
        aggfunc='first')
    
    # Соединяем и преобразовываем
    final_df = (pd.concat([extr, ranges])
                .sort_values(by=['sku_sellout', 'metrics'])
                .reset_index()
                .rename_axis(None, axis=1)
                )[['sku_sellout', 'metrics', 'менее 100%', '100-200%', 'более 200%']]
    

    结论:

    print(final_df)
    
      sku_sellout   metrics менее 100% 100-200% более 200%
    0           a  qnt_extr       25.0     20.0        NaN
    1           a    ranges      0-100  100-200        NaN
    2           a  rur_extr        2.0      2.0        NaN
    3           b  qnt_extr        NaN      NaN       30.0
    4           b    ranges        NaN      NaN    200-300
    5           b  rur_extr        NaN      NaN        3.0
    6           c  qnt_extr        NaN      NaN       40.0
    7           c    ranges        NaN      NaN   900-1000
    8           c  rur_extr        NaN      NaN        4.0
    
    • 2

相关问题

  • 如何在 Matplotlib 中的函数中组织数据标签

  • 按日期过滤,另一个数据框条件

  • 熊猫。按两个条件对行进行排序

  • 在控制台中写入 CSV 文件不存在

  • 多索引删除

  • 创建 pandas 多索引

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5