小编cho*_*raf的帖子

索引所有*除了*python中的一个项目

有没有一种简单的方法来索引列表(或数组,或其他)的所有元素,除了特定的索引?例如,

  • mylist[3] 将返回位置3的项目

  • milist[~3] 将返回除3之外的整个列表

python indexing numpy list

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

如何使用另一个MultiIndex切割一个MultiIndex DataFrame

我有一个包含3个MultiIndex级别的pandas数据帧.我试图根据对应于两个级别的值列表拉出此数据帧的行.

我有这样的事情:

ix = pd.MultiIndex.from_product([[1, 2, 3], ['foo', 'bar'], ['baz', 'can']], names=['a', 'b', 'c'])
data = np.arange(len(ix))
df = pd.DataFrame(data, index=ix, columns=['hi'])
print(df)

           hi
a b   c      
1 foo baz   0
      can   1
  bar baz   2
      can   3
2 foo baz   4
      can   5
  bar baz   6
      can   7
3 foo baz   8
      can   9
  bar baz  10
      can  11
Run Code Online (Sandbox Code Playgroud)

现在我想要获取索引级别'b'和'c'在此索引中的所有行:

ix_use = pd.MultiIndex.from_tuples([('foo', 'can'), ('bar', 'baz')], names=['b', 'c'])
Run Code Online (Sandbox Code Playgroud)

即值hi具有('foo', 'can')('bar', 'baz')在水平b和 …

python multi-index dataframe pandas

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

Pandas:使用数据框的多个列作为另一个的索引

我有一个包含数据的大型数据框,以及包含每个时间点元数据的相同第一维的另一个数据框(例如,它是什么试用版,它是什么样的试用版).

我想要做的是使用"metadataframe"的值来切割大型数据帧.我想保持这些独立(而不是将元数据帧存储为较大元数据的多索引).

现在,我正在尝试做这样的事情:

def my_func(container):
   container.big_df.set_index(container.meta_df[['col1', 'col2']])
   container.big_df.loc['col1val', 'col2val'].plot()
Run Code Online (Sandbox Code Playgroud)

但是,这会返回以下错误:

ValueError: Must pass DataFrame with boolean values only
Run Code Online (Sandbox Code Playgroud)

请注意,如果我只将一个列传递给set_index,这样可以正常工作.

谁能弄明白这里出了什么问题?或者,有人可以告诉我,我是以一种完全愚蠢和愚蠢的方式做到这一点,并且有一个更好的方法去做吗?:)

我的解决方案

谢谢你的想法.我玩了索引一点点,这似乎是最简单/最快的.我不喜欢剥离其名称的索引,并且转换值等似乎很麻烦.我意识到一些有趣的东西(可能很容易修复):

dfa.set_index(dfb[['col1', 'col2']]) 
Run Code Online (Sandbox Code Playgroud)

不起作用,但是

dfa.set_index([dfb.col1, dfb.col2])
Run Code Online (Sandbox Code Playgroud)

确实.

因此,您基本上可以将dfb转换为列列表,使set_index工作,遵循以下约定:

dfa.set_index([dfb[col] for col in ['col1', 'col2']])
Run Code Online (Sandbox Code Playgroud)

python numpy scipy pandas scikit-learn

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

扩展 pandas 多重索引,为每个索引添加 N 个新级别?

我经常遇到这样的情况:我有一个 pandas 多重索引,其级别如下:

ix = pd.MultiIndex.from_tuples(((1, 2),
                                (1, 3),
                                (2, 2),
                                (2, 5)), names=['hi', 'there'])
a = pd.DataFrame([0]*4, index=ix, columns=['foo'])
Run Code Online (Sandbox Code Playgroud)

具有这种结构:

print a
          foo
hi there   
1  2      0
   3      0
2  2      0
   5      0
Run Code Online (Sandbox Code Playgroud)

但是,我想扩展这些索引,例如每个级别 3 个新索引。所以我想添加另一个索引,使最终产品看起来像这样:

                  foo
hi there newix     
1  2     1        0
         2        0
   3     1        0
         2        0
2  2     1        0
         2        0
   5     1        0
         2        0
Run Code Online (Sandbox Code Playgroud)

我想不出使用“from_product”之类的明显方法来做到这一点。我想我可以通过迭代前两行来手动构造元组,但这看起来很麻烦。有没有比我想象的更优雅的方法来实现这一点?

编辑:理想情况下,这将不是这样的:

newixs = []
for ix in a.index:
    for i in range(5):
        nix = …
Run Code Online (Sandbox Code Playgroud)

python scipy pandas

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

如果先运行,则并行代码会挂起,但如果在运行非并行代码后运行,则可以运行

因此,这听起来有些令人费解,但是最近我在joblib中遇到了一个问题,即它将创建一堆进程,然后挂在那儿(也就是,每个进程占用内存,但不占用CPU时间)。

这是我得到的最简单的代码,可以重现该问题:

from sklearn import linear_model
import numpy as np
from sklearn import cross_validation as cval
from joblib import Parallel, delayed

def fit_hanging_model(n=10000, nx=10, ny=32, ndelay=10,
                       n_cvs=5, n_jobs=None):
    # Create data
    X = np.random.randn(n, ny*ndelay)
    y = np.random.randn(n, nx)

    # Create model + CV
    model = linear_model.Ridge(alpha=1000.)
    cvest = cval.KFold(n, n_folds=n_cvs, shuffle=True)

    # Fit model
    par = Parallel(n_jobs=n_jobs, verbose=10)
    parfunc = delayed(_fit_model_cvs)
    par(parfunc(X, y, train, test, model)
                      for i, (train, test) in enumerate(cvest))

def _fit_model_cvs(X, Y, train, test, model):
    model.fit(X, …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing scikit-learn

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