当前位置: 首页 > 知识库问答 >
问题:

熊猫与aggfuncpivot_table在几乎不同的数据上工作不同

燕英逸
2023-03-14

我有一个日期、买入和卖出值的数据框架,并在该数据框架上做一个pivot\u表,以获得每个有效日期的所有买入/卖出值。

data = [('20170325', 'Buy', 400 ),
        ('20170325', 'Buy', 401 ),
        ('20170323', 'Buy', 400 ),
        ('20170324', 'Sell', 400 )]

testDf = pd.DataFrame(data, columns=['Date', 'Scenario', 'Value'])
df1 = pd.pivot_table(testDf, columns='Scenario', index='Date', values='Value', 
                     fill_value = '', aggfunc=lambda x: x.tolist() if len(x)>1 else x)
df1
#    Scenario         Buy Sell
#    Date                     
#    20170323         400     
#    20170324              400
#    20170325  [400, 401]

但当我的数据有点变化时,pivot\u table抛出error:ValueError:Function不会减少。无法理解为什么。以下是不同数据的错误。请注意,日期20170325更改为20170321。

data = [('20170321', 'Buy', 400 ),
        ('20170321', 'Buy', 401 ),
        ('20170323', 'Buy', 400 ),
        ('20170324', 'Sell', 400 )]

testDf = pd.DataFrame(data, columns=['Date', 'Scenario', 'Value'])
df1 = pd.pivot_table(testDf, columns='Scenario', index='Date', values='Value', 
                     fill_value = '',aggfunc=lambda x: x.tolist() if len(x)>1 else x)

回溯(最近一次调用):pivot_表
文件“ext2\vc12_win32\lib\python2.7\site packages\pands\tools\pivot.py”第114行的第1行文件“ext2\vc12_win32\lib\python2.7\site packages\pandas\core\groupby.py”,agg
文件“ext2\vc12_win32\lib\python2.7\site packages\pandages\core\groupby.py”第2978行的第729行中的第1行文件“ext2\vc12\vc12\vc12\cole\,聚合
文件“ext2\vc12\u win32\lib\python2.7\site packages\pandas\core\groupby.py”,第1227行,聚合
文件“ext2\vc12\u win32\lib\python2.7\site packages\pandas\core\groupby.py”,第1733行,聚合文件“ext2\vc12\u win32\lib\python2.7\site packages packages\pandas\core\groupby.py”,第1767行,在"聚合"系列中"纯"python
ValueError:函数不减少

共有2个答案

莫宝
2023-03-14

我在你的第一个数据集上也遇到了同样的错误。我相信这是由于一天的重复值造成的。

这似乎是这篇SO帖子中熊猫的一个特征。

让我们尝试将tolist()转换为使用tuple。

df1 = pd.pivot_table(testDf, columns='Scenario', index='Date', values='Value', fill_value = '',aggfunc=lambda x: tuple(x))
谭俊
2023-03-14

甚至考虑<代码> GROPPEB/<代码> <代码> PIVOT < /代码>:

df1 = testDf.groupby(['Date', 'Scenario'])['Value'].apply(lambda x: list(x)).reset_index()\
            .pivot(index='Date', columns='Scenario', values='Value').fillna('')

# Scenario         Buy   Sell
# Date                       
# 20170323       [400]       
# 20170324              [400]
# 20170325  [400, 401]       

# Scenario         Buy   Sell
# Date                       
# 20170321  [400, 401]       
# 20170323       [400]       
# 20170324              [400]
 类似资料:
  • 问题内容: 假设我有一个用户活动日志,我想生成一个总持续时间和每天唯一身份用户数量的报告。 汇总持续时间非常简单: 我想做的是同时计算持续时间并计算不重复次数,但我似乎找不到count_distinct的等效项: 这可行,但是肯定有更好的方法,不是吗? 我在想,我只需要提供一个将Series对象的不同项目的计数返回给聚合函数的函数,但是我对各种库的接触并不多。另外,似乎groupby对象已经知道此

  • 我有一个pd DataFrame列,其中日期值的格式不同。例如“YYYY-MM-DD hh:MM:ss”和“DD.MM”。“YYYY”甚至“DD.MM”我想将它们全部转换为一种格式(例如,“YYYY-MM-DD”),并(在许多事情中)尝试过 查找日期未写为“YYYY-MM-DD hh:MM:ss”的行。然而,这不起作用。 因此,我检查了列的类型 然后我检查了一下 并收到了诸如类的datetime之

  • 问题内容: 我有一个Pandas数据框,其中一列包含文本。我想获得一列出现在整列中的唯一单词的列表(空格是唯一的拆分)。 输出应如下所示: 获得计数也没有什么坏处,但这不是必需的。 问题答案: 使用来创建唯一元素的序列。 进行一些清理以使小写字母的字符串分解: 该列中的每个列表都可以传递给函数以获取唯一值。使用这样做: 或与from注释一起使用:

  • 我有两个数据帧:df1和df2。df1有列['UserId'、'company'、'deg'],有100个观察值。df2有列['UserId','deg',],有10个观察值。df1和df2中的索引与“userId”完全匹配。 我想用df2中的更新df1。df2中的“UserId”列是df1中“UserId”列的子集……因此,没有任何附加内容。仅基于“userId”(和/或普通索引)。 df1 d

  • 在学习熊猫的过程中,我已经尝试了好几个月来找出这个问题的答案。我在日常工作中使用SAS,这是非常好的,因为它提供了非核心支持。然而,SAS作为一个软件是可怕的,原因还有很多。 有一天,我希望用python和pandas取代SAS的使用,但我目前缺乏大型数据集的核心外工作流。我说的不是需要分布式网络的“大数据”,而是文件太大而无法放入内存,但又太小而无法装入硬盘。 我的第一个想法是使用将大型数据集保

  • 我肯定错过了一些简单的东西。尝试合并熊猫中的两个数据帧,它们的列名基本相同,但右边的数据帧有一些左边没有的列,反之亦然。 我已尝试使用外部联接进行联接: 但这会产生: 我还指定了一个要连接的列(例如,on="id"),但这会重复所有列,除了"id",如attr_1_x、attr_1_y,这并不理想。我还传递了整个列列表(有很多)到on: 其产生: 我错过了什么?我想得到一个附加了所有行的df,并且