我在下面的示例中有一个排序请求.
我需要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) 该文件表明:
您还可以将轴参数指定给 .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) 我的问题涉及在多索引级别的分区内调用.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) 我有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) xlwings是否需要安装excel?
我们希望在Windows服务器上使用anaconda安装,没有EXCEL,将一些数据注入工作簿并将工作簿传递回用户.
我最近遇到了一个大型数据框及其关联的多索引的问题。这个简化的例子将演示这个问题。
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中使用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) 我有一个包含多列的 pandas 数据框。整个单级索引。
我希望删除列中所有值 ==0 的列
我可以通过循环每一列、测试并创建一个布尔数组来做到这一点。然后我转置、切片并转回
但
我必须想有更好的方法。
pandas ×6
python ×5
divide ×1
excel ×1
multi-index ×1
named-ranges ×1
python-2.7 ×1
sorting ×1
xlrd ×1
xlwings ×1