假设你有这个MultiIndex-ed DataFrame:
df = pd.DataFrame({'co':['DE','DE','FR','FR'],
'tp':['Lake','Forest','Lake','Forest'],
'area':[10,20,30,40],
'count':[7,5,2,3]})
df = df.set_index(['co','tp'])
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
area count
co tp
DE Lake 10 7
Forest 20 5
FR Lake 30 2
Forest 40 3
Run Code Online (Sandbox Code Playgroud)
我想检索每个索引级别的唯一值.这可以使用
df.index.levels[0] # returns ['DE', 'FR]
df.index.levels[1] # returns ['Lake', 'Forest']
Run Code Online (Sandbox Code Playgroud)
我真正想做的是通过按名称来解决这些级别来检索这些列表,即'co'和'tp'.我找到的最短的两种方式看起来像这样:
list(set(df.index.get_level_values('co'))) # returns ['DE', 'FR']
df.index.levels[df.index.names.index('co')] # returns ['DE', 'FR']
Run Code Online (Sandbox Code Playgroud)
但非他们非常优雅.有更短的方式吗?
我的构建存在问题(TFS2010).最近这个版本一直很好,直到今天,我现在在构建开始时几乎收到错误:
Delete Sources Directory (00:00) The Directory is not empty.
Run Code Online (Sandbox Code Playgroud)
我查看了服务器,我看到\ builds\1\myproject\sources \是空的......根本没有任何内容!错误提示不是这种情况,但肯定是空的.
我想知道在这种情况下它是否应该是空的?任何人都可以告诉我我可能会采取什么行动来让构建再次运行?
这是失败的构建的日志:
Overall Build Process
00:00
Update Build Number
00:00
Create the Drop Location
00:03
Run On Agent (reserved build agent Default Agent - server1)
00:00
Delete Test Results Directory
00:00
Delete Binaries Directory
00:00
Delete Workspace
00:00
Delete Sources Directory
The directory is not empty.
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助!
是否有规范的位置放置自编包?我自己的搜索只产生了一篇博文,内容是关于在Linux下放置与版本无关的纯Python软件包以及针对规范位置的SO问题,而我正在使用Windows.
我的用例是,我希望能够在IPython会话期间导入我自己的包,就像任何site-package一样,无论我在哪个工作目录中启动会话.在Matlab中,相应的文件夹就是例如C:/Users/ojdo/Documents/MATLAB.
import mypackage as mp
mp.awesomefunction()
...
Run Code Online (Sandbox Code Playgroud) pandas.Series对象确实有很多to_*功能,但缺少一个to_excel功能.是否有更简单/更好的方法来完成此代码段第3行的导出?仅仅为简单的I/O将系列转换为DataFrame感觉很笨:
import numpy as np
import pandas as pd
s = pd.Series([1,3,5,np.nan,6,8])
pd.DataFrame(s).to_excel('s.xlsx', 's')
Run Code Online (Sandbox Code Playgroud) 我想将demand多个商品(此处为:Water,Elec)和区域类型(Com,Ind,Res)的查找表()与DataFrame(areas)相乘,后者是这些区域类型的区域表.
import pandas as pd
areas = pd.DataFrame({'Com':[1,2,3], 'Ind':[4,5,6]})
demand = pd.DataFrame({'Water':[4,3],
'Elec':[8,9]}, index=['Com', 'Ind'])
Run Code Online (Sandbox Code Playgroud)
之前:
areas
Com Ind
0 1 4
1 2 5
2 3 6
demand
Elec Water
Com 8 4
Ind 9 3
Run Code Online (Sandbox Code Playgroud)
后:
area_demands
Com Ind
Elec Water Elec Water
0 8 4 36 12
1 16 8 45 15
2 24 12 54 18
Run Code Online (Sandbox Code Playgroud)
我的尝试
冗长不完整; 不适用于任意数量的商品.
areas = pd.DataFrame({'area': areas.stack()})
areas.index.names = ['Edge', 'Type']
both = areas.reset_index(1).join(demand, on='Type')
both['Elec'] …Run Code Online (Sandbox Code Playgroud) 另一个新手熊猫问题.我想将DataFrame转换为字典,但其方式与DataFrame.to_dict()函数提供的方式不同.按示例说明:
df = pd.DataFrame({'co':['DE','DE','FR','FR'],
'tp':['Lake','Forest','Lake','Forest'],
'area':[10,20,30,40],
'count':[7,5,2,3]})
df = df.set_index(['co','tp'])
Run Code Online (Sandbox Code Playgroud)
之前:
area count
co tp
DE Lake 10 7
Forest 20 5
FR Lake 30 2
Forest 40 3
Run Code Online (Sandbox Code Playgroud)
后:
{('DE', 'Lake', 'area'): 10,
('DE', 'Lake', 'count'): 7,
('DE', 'Forest', 'area'): 20,
...
('FR', 'Forest', 'count'): 3 }
Run Code Online (Sandbox Code Playgroud)
dict键应该是由索引行+列标题组成的元组,而dict值应该是单独的DataFrame值.对于上面的例子,我设法找到了这个表达式:
after = {(r[0],r[1],c):df.ix[r,c] for c in df.columns for r in df.index}
Run Code Online (Sandbox Code Playgroud)
如何推广此代码以适用于具有N级(而不是2级)的MultiIndices?
回答
感谢DSM的回答,我发现我实际上只需要使用元组连接r+(c,),上面的二维循环变为N维:
after = {r + (c,): df.ix[r,c] for …Run Code Online (Sandbox Code Playgroud) 我想在matplotlib中的注释文本周围有一个彩色缓冲区.在QGIS中截取的屏幕截图显示了它的样子(红色):

我的天真方法涉及两次绘制"一些文本",不同的字体大小和字体重量.结果看起来并不令人信服.该bbox解决方案"作品",但不具有相同的美学缓冲的文本.
%matplotlib inline
import matplotlib as mpl
import matplotlib.pyplot as plt
# font size
plt.annotate(
'Some text', xy=(.5, .75), color=(.7, .7, .7),
ha='center', va='center', fontsize='20')
plt.annotate(
'Some text', xy=(.5, .75), color=(.2, .3, .8),
ha='center', va='center', fontsize='16')
# font weight
plt.annotate(
'Some text', xy=(.5, .5), color=(.7, .7, .7),
ha='center', va='center', fontsize='16', weight='bold')
plt.annotate(
'Some text', xy=(.5, .5), color=(.2, .3, .8),
ha='center', va='center', fontsize='16')
# bbox
plt.annotate(
'Some text', xy=(.5, .25), color=(.2, …Run Code Online (Sandbox Code Playgroud) 示例(运行ipython --pylab):
x = arange(25)
Y = maximum(0,2+randn(7,25))
stackplot(x,Y)
legend(('A','B','C','D','E','F','G'))
Run Code Online (Sandbox Code Playgroud)
问题:我得到一个空矩形,而不是一个合适的图例.这是一个已知问题,一个解决方法是使用另一个支持图例的绘图元素,也称为代理艺术家.现在我想知道这个成语是如何通过七个数据系列翻译成我的情况的.这是我尝试过的:
proxy = [Rectangle((0,0), 0,0) for _ in Y]
legend(proxy, ('A','B','C','D','E','F','G'))
Run Code Online (Sandbox Code Playgroud)
现在我有一个包含7个元素的图例,但它们都是蓝色的.如何让代理艺术家匹配stackplot颜色?