小编Tim*_*omb的帖子

如何在特定级别重新排序多索引数据框列

我有一个多索引DataFrame,其名称附加到列级别.我希望能够轻松地改变列周围的列,以便它们匹配用户指定的顺序.由于这是在管道中,我无法使用此推荐的解决方案并在创建时正确地订购它们.

我有一个看起来像(像)的数据表

Experiment           BASE           IWWGCW         IWWGDW
Lead Time                24     48      24     48      24     48
2010-11-27 12:00:00   0.997  0.991   0.998  0.990   0.998  0.990
2010-11-28 12:00:00   0.998  0.987   0.997  0.990   0.997  0.990
2010-11-29 12:00:00   0.997  0.992   0.997  0.992   0.997  0.992
2010-11-30 12:00:00   0.997  0.987   0.997  0.987   0.997  0.987
2010-12-01 12:00:00   0.996  0.986   0.996  0.986   0.996  0.986
Run Code Online (Sandbox Code Playgroud)

我想要列出一个列表,['IWWGCW', 'IWWGDW', 'BASE']并重新排序为:

Experiment           IWWGCW         IWWGDW         BASE           
Lead Time                24     48      24     48      24     48  
2010-11-27 12:00:00   0.998  0.990   0.998 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Fortran的私人功能

如何在Fortran中声明私有函数?

fortran

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

如何将我的pandas数据分组推广到3个以上的维度?

我正在使用优秀的pandas软件包来处理大量不同的气象诊断数据,而且当我将数据拼接在一起时,我很快就会耗尽尺寸.查看文档,可能是使用MultiIndex可以解决我的问题,但我不知道如何将其应用于我的情况 - 文档显示了使用随机数据和DataFrames 创建MultiIndex的示例,但没有预先存在的Series时间序列数据.

背景

我使用的基本数据结构包含两个主要字段:

  • metadata,这是一个字典,由描述数字的键值对组成
  • data,这是一个包含数字本身的pandas数据结构.

最小公分母是时间序列数据,因此基本结构有一个pandas Series对象作为data条目,该metadata字段描述了这些数字实际上是什么(例如,东太平洋10米风的矢量RMS误差,24小时预测来自实验Test1).

我正在考虑采用最低通用分母并将各种时间序列粘合在一起,以使结果更有用,并允许轻松组合.例如,我可能想要查看所有不同的提前期 - 我有一个过滤器例程,它将占用我的时间序列共享相同的元数据条目,除了提前期(例如实验,区域等)并返回一个新对象该metadata字段仅包含公共条目(Lead Time即已被删除),现在该data字段是一个大熊猫DataFrame,其中列标签由Lead Time值给出.我可以再次对此进行扩展,并说我想取得结果帧并将它们组合在一起,只有另一个不同的条目(例如Experiment)给我一只大熊猫Panel.对于我的条目,其中项索引由Experiment组成框架的元数据值给出,并且对象的新元数据不包含Lead TimeExperiment.

当我迭代这些复合对象时,我有一个iterseries例程,iterframes用于面板的框架和例程,当我删除一个维度时重建适当的元数据/数据配对(即,来自框架的系列,其中提前时间在列中变化将具有所有其父元数据的元数据加上Lead Time使用从列标签中获取的值恢复的字段.这非常有效.

问题

我已经用完维度(使用Panel最多3-D)并且我也无法dropna在Panel中对齐所有内容之后删除空列(这会在绘制汇总统计信息时导致一些错误).阅读有关使用具有更高维度数据的大熊猫已经阅读了有关MultiIndex它及其使用的内容.我已经尝试过文档中给出的示例,但是我仍然有点不清楚如何将它应用到我的情况中.任何方向都会有用.我希望能够:

  • Series基于我的数据组合成一个DataFrame沿任意数量维度的多索引(这将是很棒的 - 它将消除一个调用来创建系列中的帧,然后另一个调用从帧创建面板)
  • 迭代生成的多索引DataFrame,删除单个维度,以便重置组件元数据.

编辑 - …

python pandas

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

如何使用Python多处理池处理tarfile?

我正在尝试使用tar处理tarfile的内容multiprocessing.Pool.我能够在多处理模块中成功使用ThreadPool实现,但是希望能够使用进程而不是线程,因为它可能更快并且消除了对Matplotlib处理多线程环境所做的一些更改.我收到的错误是我怀疑与不共享地址空间的进程有关,但我不确定如何解决它:

Traceback (most recent call last):
  File "test_tarfile.py", line 32, in <module>
    test_multiproc()
  File "test_tarfile.py", line 24, in test_multiproc
    pool.map(read_file, files)
  File "/ldata/whitcomb/epd-7.1-2-rh5-x86_64/lib/python2.7/multiprocessing/pool.py", line 225, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/ldata/whitcomb/epd-7.1-2-rh5-x86_64/lib/python2.7/multiprocessing/pool.py", line 522, in get
    raise self._value
ValueError: I/O operation on closed file
Run Code Online (Sandbox Code Playgroud)

实际的程序更复杂,但这是我正在做的再现错误的一个例子:

from multiprocessing.pool import ThreadPool, Pool
import StringIO
import tarfile

def write_tar():
    tar = tarfile.open('test.tar', 'w')
    contents = 'line1'
    info = tarfile.TarInfo('file1.txt')
    info.size = len(contents)
    tar.addfile(info, StringIO.StringIO(contents))
    tar.close()

def test_multithread():
    tar   = tarfile.open('test.tar') …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing tarfile

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

如何使用备用发件人/组织者创建Outlook会议请求?

我开发了一个Python应用程序来自动发送电子邮件和满足内部办公事件的请求.为了使这些与我的常规通信分开,我们设置了一个备用电子邮件地址,我可以使用该地址发送官方公告.我已经修改了我的应用程序,通过使用SentOnBehalfOfName备用发件人来处理电子邮件- 但是,我无法复制这个以满足会议请求.我的尝试基于一系列网络搜索.但是,在运行时,我收到错误:

Traceback (most recent call last):
  File "mailer_test.py", line 49, in <module> test_sender)
  File "mailer_test.py", line 38, in send_meeting_request
    mtg.Send()
  File "<COMObject CreateItem>", line 2, in Send
pywintypes.com_error: (-2147024809, 'The parameter is incorrect.', None, None)
Run Code Online (Sandbox Code Playgroud)

当我为备用发件人添加选项时会发生这种情况 - 删除此选项会导致从我的帐户成功发送邮件.重现错误的测试代码如下 - 我删除了我的实际电子邮件地址,但其他一切都是相同的.

import win32com.client

OUTLOOK_APPOINTMENT_ITEM  = 1
OUTLOOK_MEETING           = 1
OUTLOOK_ORGANIZER         = 0
OUTLOOK_OPTIONAL_ATTENDEE = 2

ONE_HOUR       = 60
THIRTY_MINUTES = 30

OUTLOOK_FORMAT = '%m/%d/%Y %H:%M'
outlook_date   = lambda dt: dt.strftime(OUTLOOK_FORMAT)

class OutlookClient(object):
    def __init__(self):
        self.outlook = win32com.client.Dispatch('Outlook.Application')

    def …
Run Code Online (Sandbox Code Playgroud)

python outlook win32com

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

如何使用MultiIndex在单个级别的DataFrame上迭代和应用函数?

感谢对我最初的问题的回复,我现在有了一个多索引的DataFrame,就像我想要的那样.现在我已经掌握了数据结构的数据,我试图将其解决,并想知道是否有更好的方法来实现这一点.我的两个问题是相关的,但可能有单独的"理想"解决方案:

示例DataFrame(截断)

Experiment           IWWGCW         IWWGDW       
Lead Time                24     48      24     48
2010-11-27 12:00:00   0.997  0.991   0.998  0.990
2010-11-28 12:00:00   0.998  0.987   0.997  0.990
2010-11-29 12:00:00   0.997  0.992   0.997  0.992
2010-11-30 12:00:00   0.997  0.987   0.997  0.987
2010-12-01 12:00:00   0.996  0.986   0.996  0.986
Run Code Online (Sandbox Code Playgroud)

迭代

我希望能够循环遍历这个DataFrame,其中迭代只会使我只有1个索引维度,即一个iteritems将返回[('IWWGCW', df['IWWGCW']), ('IWWGDW', df['IWWGDW'])]并产生带有提前时间列的2个DataFrame 的行为.我的暴力解决方案是使用基本上做的包装程序[(key, df[key] for key in df.columns.levels[0]].有一个更好的方法吗?

应用

我还想做一些事情,比如"从其他人那里减去IWWGDW条目"来计算配对差异.我试着做df.apply(lambda f: f - df['IWWGDW'])KeyError: ('IWWGDW', 'occurred at index 2010-11-26 12:00:00')不管我是否使用axis=1或得到 …

python pandas

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

标签 统计

python ×5

pandas ×3

fortran ×1

multiprocessing ×1

outlook ×1

tarfile ×1

win32com ×1