【问题标题】:Pandas Pivot table for integer column is returning decimal values整数列的 Pandas Pivot 表返回十进制值
【发布时间】:2017-09-19 04:54:32
【问题描述】:

我正在使用 pandas 在 python 中试验数据透视表,如果单词出现在文本中,我有一列包含 1,如果单词没有出现,则包含 0。因此,我期待值列中的整数值,但我得到的输出如下:

Athens                       0.085366
Atlantic Time (Canada)       0.545455
Baghdad                      0.457746
Baku                         0.500000
Beijing                      0.000000
Belgrade                     0.000000
Berlin                       0.000000
Brasilia                     0.666667
Brisbane                     0.000000

我认为它可能会采用一些比率而不是总数,但由于除了数据框、索引和值之外我没有传递任何参数,所以我不知道它为什么会这样做。

我有一个数据框,其中包含从推文的 JSON 代码创建的列

tweets['timezone'] = list(map(lambda tweet: (tweet['user']['time_zone'] if 'time_zone' != None else None ),tweets_data))
tweets['ktheer'] = tweets['text'].apply(lambda tweet: word_in_text('كثير', tweet),tweets_data)

这是我用于数据透视表的两列,这是制作表格的代码:

words_pivot = pd.pivot_table(tweets, index = ['timezone'], values = ['ktheer'])

非常感谢您对可能出错的任何想法。我不知道为什么我不会得到整数。

更新:经过一番尝试,我很确定问题在于 python 将枢轴值计算为给定时区中所有观察值的比率。但我仍然不确定如何解决问题或导致问题的原因。

【问题讨论】:

    标签: python pandas dataframe pivot-table


    【解决方案1】:

    因为pandas 基于numpy,您可能总是得到浮点结果而不是整数。

    pivot_table function 接受参数aggfunc,默认为numpy.mean。如果你把它改成numpy.sum,你应该得到你想要的。

    words_pivot = pd.pivot_table(tweets, index = ['timezone'], values = ['ktheer'], aggfunc=numpy.sum)
    

    【讨论】:

    • 这行得通,但我只需要使用 aggfunc = sum。 numpy 是不必要的。非常感谢!
    猜你喜欢
    • 2016-02-24
    • 2020-12-14
    • 2014-08-28
    • 2010-12-21
    • 2021-06-04
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多