相关疑难解决方法(0)

如何透视数据框

  • 什么是枢轴?
  • 如何转动?
  • 这是一个支点吗?
  • 长格式到宽格式?

我见过很多关于数据透视表的问题.即使他们不知道他们询问数据透视表,他们通常也是.几乎不可能写出一个规范的问题和答案,其中包含了旋转的所有方面....

......但是我要试一试.


现有问题和答案的问题在于,问题通常集中在OP难以概括以便使用一些现有的良好答案的细微差别.但是,没有一个答案试图给出全面的解释(因为这是一项艰巨的任务)

从我的谷歌搜索中查看一些示例

  1. 如何在Pandas中透视数据框?
    • 好问答.但答案只回答了具体问题,几乎没有解释.
  2. pandas将表转移到数据框
    • 在这个问题中,OP关注的是枢轴的输出.即列的外观.OP希望它看起来像R.这对熊猫用户来说并不是很有帮助.
  3. pandas转动数据框,重复行
    • 另一个体面的问题,但答案集中在一种方法,即 pd.DataFrame.pivot

因此,每当有人搜索时,pivot他们会得到零星的结果,而这些结果可能无法回答他们的具体问题.


建立

您可能会注意到,我明显地将我的列和相关列值命名为与我将如何在下面的答案中进行调整相对应.请注意,以便熟悉哪些列名称可以从哪里获得您正在寻找的结果.

import numpy as np
import pandas as pd
from numpy.core.defchararray import add

np.random.seed([3,1415])
n = 20

cols = np.array(['key', 'row', 'item', 'col'])
arr1 = (np.random.randint(5, size=(n, 4)) // [2, 1, 2, 1]).astype(str)

df = pd.DataFrame(
    add(cols, arr1), columns=cols
).join(
    pd.DataFrame(np.random.rand(n, 2).round(2)).add_prefix('val')
)
print(df)

     key   row   item   col  val0  val1
0   key0  row3  item1  col3  0.81  0.04
1   key1 …
Run Code Online (Sandbox Code Playgroud)

python pivot group-by pandas pandas-groupby

296
推荐指数
4
解决办法
2万
查看次数

pandas将一些列转换为行

所以我的数据集有n个日期的位置信息.问题是每个日期实际上是一个不同的列标题.例如,CSV看起来像

location    name    Jan-2010    Feb-2010    March-2010
A           "test"  12          20          30
B           "foo"   18          20          25
Run Code Online (Sandbox Code Playgroud)

我想要的是它看起来像

location    name    Date        Value
A           "test"  Jan-2010    12       
A           "test"  Feb-2010    20
A           "test"  March-2010  30
B           "foo"   Jan-2010    18       
B           "foo"   Feb-2010    20
B           "foo"   March-2010  25
Run Code Online (Sandbox Code Playgroud)

问题是我不知道列中有多少个日期(虽然我知道它们总是会在名字后面开始)

python pandas

52
推荐指数
6
解决办法
5万
查看次数

pivot_table无需聚合的数字类型

我想从与列下面的数据帧进行透视表sales,rep.数据透视表显示sales但没有rep.当我只尝试时rep,我得到了错误DataError: No numeric types to aggregate.如何解决这个问题,我看到数字字段sales和字段(字符串)rep

data = {'year': ['2016', '2016', '2015', '2014', '2013'],
        'country':['uk', 'usa', 'fr','fr','uk'],
        'sales': [10, 21, 20, 10,12],
        'rep': ['john', 'john', 'claire', 'kyle','kyle']
        }

print pd.DataFrame(data).pivot_table(index='country', columns='year', values=['rep','sales'])

        sales               
year     2013 2014 2015 2016
country                     
fr        NaN   10   20  NaN
uk         12  NaN  NaN   10
usa       NaN  NaN  NaN   21


print pd.DataFrame(data).pivot_table(index='country', columns='year', values=['rep'])
DataError: No numeric types to aggregate
Run Code Online (Sandbox Code Playgroud)

python pandas

8
推荐指数
1
解决办法
2万
查看次数

标签 统计

pandas ×3

python ×3

group-by ×1

pandas-groupby ×1

pivot ×1