带有aggfunc的Pandas pivot_table在不同的数据上工作方式不同

时间:2017-04-19 13:53:59

标签: python pandas

我有 Date 购买 Sell 值的数据框,并在该数据框上执行pivot_table以获取所有数据购买/出售每个有效日期的价值。

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_table会抛出错误: ValueError:函数不会减少。无法理解为什么。这是不同数据的错误。请注意 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)
  

Traceback(最近一次调用最后一次):文件“”,第1行,in   
文件   “EXT2 \ vc12_win32 \ LIB \ python2.7 \站点包\大熊猫\工具\ pivot.py”   第114行,在pivot_table
文件中   “EXT2 \ vc12_win32 \ LIB \ python2.7 \站点包\大熊猫\核心\ groupby.py”   第729行,在agg
文件中   “EXT2 \ vc12_win32 \ LIB \ python2.7 \站点包\大熊猫\核心\ groupby.py”   第2978行,总计为文件   “EXT2 \ vc12_win32 \ LIB \ python2.7 \站点包\大熊猫\核心\ groupby.py”   第1227行,在_python_agg_general中   “EXT2 \ vc12_win32 \ LIB \ python2.7 \站点包\大熊猫\核心\ groupby.py”   第1733行,在agg_series中文件   “EXT2 \ vc12_win32 \ LIB \ python2.7 \站点包\大熊猫\核心\ groupby.py”   第1767行,在_aggregate_series_pure_python中为ValueError:   功能不会降低

2 个答案:

答案 0 :(得分:1)

考虑CREATE CLASS Account extends V CREATE PROPERTY Account.gender STRING ALTER PROPERTY Account.gender REGEXP "M|F" groupby

pivot

答案 1 :(得分:0)

我的第一个数据集也出现了同样的错误。我相信这是由于一天的重复值。

这似乎是来自此SO post.

的大熊猫的一个功能

让我们尝试将你的tolist()转换为使用元组。

df1 = pd.pivot_table(testDf, columns='Scenario', index='Date', values='Value', fill_value = '',aggfunc=lambda x: tuple(x))