小编Dic*_*ter的帖子

在pandas中的多索引级别内按列排序

我在下面的示例中有一个排序请求.

我需要reset_index(),然后sort()然后set_index()还是有一个光滑的方式来做到这一点?

l = [[1,'A',99],[1,'B',102],[1,'C',105],[1,'D',97],[2,'A',19],[2,'B',14],[2,'C',10],[2,'D',17]]
df = pd.DataFrame(l,columns = ['idx1','idx2','col1'])
df.set_index(['idx1','idx2'],inplace=True)

# assume data has been received like this...
print df

           col1
idx1 idx2      
1    A       99
     B      102
     C      105
     D       97
2    A       19
     B       14
     C       10
     D       17

# I'd like to sort descending on col1, partitioning within index level = 'idx2'

           col1
idx1 idx2      
1    C      105
     B      102
     A       99
     D       97

2    A       19
     D       17
     B       14
     C       10
Run Code Online (Sandbox Code Playgroud)

谢谢你的回答注意我稍微改变了数据:

l = …
Run Code Online (Sandbox Code Playgroud)

python sorting pandas

23
推荐指数
3
解决办法
9355
查看次数

.loc() 的轴参数以解释轴=1 上传递的切片器

文件表明:

您还可以将轴参数指定给 .loc 以解释在单个轴上传递的切片器。

但是,尝试沿列索引切片时出现错误。

import pandas as pd
import numpy as np

cols= [(yr,m) for yr in [2014,2015] for m in [7,8,9,10]]
df = pd.DataFrame(np.random.randint(1,100,(10,8)),index=tuple('ABCDEFGHIJ'))
df.columns =pd.MultiIndex.from_tuples(cols)

print df.head()

  2014             2015            
    7   8   9   10   7   8   9   10
A   68  51   6  48   24   3   4  85
B   79  75  68  62   19  40  63  45
C   60  15  32  32   37  95  56  38
D    4  54  81  50   13  64  65  13
E   78 …
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
1
解决办法
2882
查看次数

在多索引级别分区pandas .diff()

我的问题涉及在多索引级别的分区内调用.diff()

在下面的示例中输出第一个

df.diff()是

               values
Greek English        
alpha a           NaN
      b             2
      c             2
      d             2
beta  e            11
      f             1
      g             1
      h             1
Run Code Online (Sandbox Code Playgroud)

但我希望它是:

               values
Greek English        
alpha a           NaN
      b             2
      c             2
      d             2
beta  e            NaN
      f             1
      g             1
      h             1
Run Code Online (Sandbox Code Playgroud)

这是一个解决方案,使用循环,但我想我可以避免这个循环!

import pandas as pd
import numpy as np

df = pd.DataFrame({'values' : [1.,3.,5.,7.,18.,19.,20.,21.],
   'Greek' : ['alpha', 'alpha', 'alpha', 'alpha','beta','beta','beta','beta'],
   'English' : ['a', 'b', 'c', 'd','e','f','g','h']})

df.set_index(['Greek','English'],inplace =True)
print df

# (1.) …
Run Code Online (Sandbox Code Playgroud)

multi-index pandas

6
推荐指数
1
解决办法
2349
查看次数

将一个Pandas Dataframe划分为另一个 - 忽略索引但尊重列

我有2个数据帧.我想广播分道操作

df1= pd.DataFrame([[1.,2.,3.,4.], [5.,6.,7.,8.], [9.,10.,11.,12.]],
                  columns=['A','B','C','D'], index=['x','y','z'])

df2= pd.DataFrame([[0.,1.,2.,3.]], columns=['A','B','D','C'], index=['q'])
Run Code Online (Sandbox Code Playgroud)

请注意,df2中的列的对齐方式略有不同.

我想将df1除以df2,其中广播行但是列标签被尊重.

   A   B   C   D
x  1   2   3   4
y  5   6   7   8
z  9  10  11  12


   A  B  D  C
q  0  1  2  3
Run Code Online (Sandbox Code Playgroud)

这是错误的.

df1.values/df2.values

[[         inf   2.           1.5          1.33333333]
 [         inf   6.           3.5          2.66666667]
 [         inf  10.           5.5          4.        ]]
Run Code Online (Sandbox Code Playgroud)

答案我的愿望是:

   A    B   C      D
x  inf  2   1      2
y  inf  6   2.33   4
z  inf  10  3.66   6
Run Code Online (Sandbox Code Playgroud)

python divide pandas

5
推荐指数
1
解决办法
5885
查看次数

xlwings是否需要excel安装

xlwings是否需要安装excel?

我们希望在Windows服务器上使用anaconda安装,没有EXCEL,将一些数据注入工作簿并将工作簿传递回用户.

python-2.7 xlwings

5
推荐指数
1
解决办法
2403
查看次数

数据帧切片不会删除索引值

我最近遇到了一个大型数据框及其关联的多索引的问题。这个简化的例子将演示这个问题。

import pandas as pd
import numpy as np

np.random.seed(1)
idx = pd.MultiIndex.from_product([['A','B'],[5,6]])


df = pd.DataFrame(data= np.random.randint(1,100,(4)),index= idx,columns =['P'])
print df
Run Code Online (Sandbox Code Playgroud)

其中产生:

      P
A 5  38
  6  13
B 5  73
  6  10
Run Code Online (Sandbox Code Playgroud)

现在快速浏览一下索引

print df.index

MultiIndex(levels=[[u'A', u'B'], [5, 6]],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]])
Run Code Online (Sandbox Code Playgroud)

如果我对这个数据框进行切片,我会注意到多索引永远不会压缩。即使是深拷贝。

在切片操作中减少索引内存占用的最佳方法是什么?

df_slice = df[df['P']>20]
print df_slice
print df_slice.index

      P
A 5  38
B 5  73
Run Code Online (Sandbox Code Playgroud)

查看数据帧如何减少,但索引没有。

MultiIndex(levels=[[u'A', u'B'], [5, 6]],
           labels=[[0, 1], [0, 0]])
Run Code Online (Sandbox Code Playgroud)

即使使用 .copy(deep=True)

df_slice = df[df['P']>20].copy(deep=True)
print df_slice.index …
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
1
解决办法
2210
查看次数

Python xlrd命名范围值

在Python中使用XLRD从Excel中读取。

简单的场景。我有一个带有值的单元格,它与一个命名范围相关联。

NamedRange“ Foo” = Sheet1!$ A $ 1 A1中的值是“ Bar”

book =xlrd.open_workbook("")

rng =  book.name_map['foo'][0]  # lower case for some reason.

print rng.???   # how to print the cell value bar??
Run Code Online (Sandbox Code Playgroud)

我只想在python代码中引用命名范围“ Foo”,并打印出单元格的值“ Bar”。

编辑:这是另一个更完整的示例:

import xlrd

workbook = xlrd.open_workbook('/path/to/metester.xls')
cell_obj = workbook.name_and_scope_map.get(('sales', -1))
# this does print Sheet1!$A$1
print cell_obj.formula_text
# this raises the NoneTypeError
print cell_obj.cell()
Run Code Online (Sandbox Code Playgroud)

这里有Formula_text以确保excel可以读取文件。在我的情况下,在Sheet1的单元格A1中,命名的单元格为“ sales”。

返回值:

Sheet1!$A$1
Traceback (most recent call last):
  File "tester.py", line 7, in <module>
    print cell_obj.cell()
  File "/usr/local/lib/python2.7/dist-packages/xlrd/book.py", line 253, …
Run Code Online (Sandbox Code Playgroud)

python excel xlrd named-ranges

3
推荐指数
1
解决办法
5688
查看次数

pandas dataframe - 删除所有值满足条件的列

我有一个包含多列的 pandas 数据框。整个单级索引。

我希望删除列中所有值 ==0 的列

我可以通过循环每一列、测试并创建一个布尔数组来做到这一点。然后我转置、切片并转回

我必须想有更好的方法。

pandas

1
推荐指数
1
解决办法
800
查看次数