小编ojd*_*jdo的帖子

Pandas:按标签获取唯一的MultiIndex级别值

假设你有这个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)

但非他们非常优雅.有更短的方式吗?

python pandas

52
推荐指数
3
解决办法
4万
查看次数

TFS构建损坏 - 源目录上的目录不为空

我的构建存在问题(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)

非常感谢您的帮助!

tfs build visual-studio tfs2010 visual-studio-2012

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

我应该在哪里放置我自己编写的Python包?

是否有规范的位置放置自编包?我自己的搜索只产生了一篇博文,内容是关于在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)

python

10
推荐指数
2
解决办法
4480
查看次数

熊猫系列到Excel

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)

python pandas

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

熊猫:加入外部产品

我想将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)

python pandas

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

Pandas:使用MultiIndex将DataFrame转换为dict

另一个新手熊猫问题.我想将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)

python pandas

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

matplotlib:如何缓冲标签文本?

我想在matplotlib中的注释文本周围有一个彩色缓冲区.在QGIS中截取的屏幕截图显示了它的样子(红色):

GIS中的缓冲文本

我尝试了什么

我的天真方法涉及两次绘制"一些文本",不同的字体大小和字体重量.结果看起来并不令人信服.该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)

python matplotlib

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

如何在stackplot中使用Matplotlib代理艺术家?

示例(运行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颜色?

matplotlib

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