相关疑难解决方法(0)

pandas:当单元格内容是列表时,为列表中的每个元素创建一行

我有一个数据框,其中一些单元格包含多个值的列表.我不想在单元格中存储多个值,而是扩展数据框,以便列表中的每个项目都有自己的行(在所有其他列中具有相同的值).所以,如果我有:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'trial_num': [1, 2, 3, 1, 2, 3],
     'subject': [1, 1, 1, 2, 2, 2],
     'samples': [list(np.random.randn(3).round(2)) for i in range(6)]
    }
)

df
Out[10]: 
                 samples  subject  trial_num
0    [0.57, -0.83, 1.44]        1          1
1    [-0.01, 1.13, 0.36]        1          2
2   [1.18, -1.46, -0.94]        1          3
3  [-0.08, -4.22, -2.05]        2          1
4     [0.72, 0.79, 0.53]        2          2
5    [0.4, -0.32, -0.13]        2          3
Run Code Online (Sandbox Code Playgroud)

如何转换为长格式,例如:

   subject  trial_num  sample  sample_num …
Run Code Online (Sandbox Code Playgroud)

python list pandas

133
推荐指数
7
解决办法
6万
查看次数

使用numpy构建两个数组的所有组合的数组

我试图在6参数函数的参数空间上运行以研究它的数值行为,然后再尝试做任何复杂的事情,所以我正在寻找一种有效的方法来做到这一点.

给定6-dim numpy数组作为输入,我的函数采用浮点值.我最初尝试做的是:

首先,我创建了一个函数,它接受2个数组并生成一个数组,其中包含来自两个数组的所有值组合

from numpy import *
def comb(a,b):
    c = []
    for i in a:
        for j in b:
            c.append(r_[i,j])
    return c
Run Code Online (Sandbox Code Playgroud)

然后我习惯reduce()将它应用于相同数组的m个副本:

def combs(a,m):
    return reduce(comb,[a]*m)
Run Code Online (Sandbox Code Playgroud)

然后我评估我的功能如下:

values = combs(np.arange(0,1,0.1),6)
for val in values:
    print F(val)
Run Code Online (Sandbox Code Playgroud)

这有效,但它太慢了.我知道参数的空间很大,但这不应该太慢.在这个例子中我只抽取了10 6(一百万)个点,并且创建数组花了超过15秒values.

你知道用numpy做这个更有效的方法吗?

F如果有必要,我可以修改函数获取它的参数的方式.

python arrays numpy multidimensional-array

132
推荐指数
9
解决办法
10万
查看次数

如何将Dataframe单元格中的列表分解为单独的行

我希望将包含列表的pandas单元格转换为每个值的行.

所以,拿这个:

在此输入图像描述

如果我想解压并堆叠'nearest_neighbors"列中的值,以便每个值都是每个'对手'索引中的一行,我最好怎么做呢?是否有适合像这样的操作的pandas方法这个?我只是不知道.

先谢谢你,伙计们.

python dataframe pandas

76
推荐指数
7
解决办法
5万
查看次数

我什么时候应该在我的代码中使用pandas apply()?

这是一个自我回答的QnA,旨在指导用户应用的缺陷和好处.

我已经看到很多关于Stack Overflow问题的答案涉及使用apply.我也看到用户评论他们说" apply很慢",应该避免".

我已经阅读了很多关于性能主题的文章,解释apply很慢.我还在文档中看到了一个关于如何apply简单地传递UDF的便利函数的免责声明(现在似乎无法找到).因此,普遍的共识是,apply如果可能,应该避免.但是,这引发了以下问题:

  1. 如果apply是如此糟糕,那为什么它在API中呢?
  2. 我应该如何以及何时制作我的代码apply- 免费?
  3. 是否有过任何地方的情况apply不错的(比其他可能的解决方案更好)?

python performance apply pandas

68
推荐指数
3
解决办法
8380
查看次数

Pandas从列中可用的列表数据中扩展行

我在熊猫中有这样的数据框:

 column1      column2
 [a,b,c]        1
 [d,e,f]        2
 [g,h,i]        3
Run Code Online (Sandbox Code Playgroud)

预期产量:

column1      column2
  a              1
  b              1
  c              1
  d              2
  e              2
  f              2
  g              3
  h              3
  i              3
Run Code Online (Sandbox Code Playgroud)

如何处理这些数据?

python expand list dataframe pandas

20
推荐指数
3
解决办法
9696
查看次数

"unstack"包含多行列表的pandas列

假设我有以下Pandas Dataframe:

df = pd.DataFrame({"a" : [1,2,3], "b" : [[1,2],[2,3,4],[5]]})
   a          b
0  1     [1, 2]
1  2  [2, 3, 4]
2  3        [5]
Run Code Online (Sandbox Code Playgroud)

我如何"取消堆叠""b"列中的列表以将其转换为数据帧:

   a  b
0  1  1
1  1  2
2  2  2
3  2  3
4  2  4
5  3  5
Run Code Online (Sandbox Code Playgroud)

python list dataframe pandas

16
推荐指数
1
解决办法
7750
查看次数

如何根据列表中的项目复制pandas中的行

我有一个像这样的pandas数据框:

COL     data
line1   [A,B,C]
Run Code Online (Sandbox Code Playgroud)

其中数据列中的项可以是列表,也可以是逗号分隔的元素.有一种简单的获取方式:

COL     data
line1   A
line1   B
line1   C
Run Code Online (Sandbox Code Playgroud)

我可以遍历列表并通过python手动复制行,但有没有一些神奇的熊猫技巧呢?关键是如何自动复制行.

谢谢!

python pandas

15
推荐指数
2
解决办法
6243
查看次数

Unnest(爆炸)熊猫系列

我有:

df = pd.DataFrame({'col1': ['asdf', 'xy', 'q'], 'col2': [1, 2, 3]})

   col1  col2
0  asdf     1
1    xy     2
2     q     3
Run Code Online (Sandbox Code Playgroud)

我想从字符串中col1取出每个字母的"组合产品" ,每个元素都在int中col2.即:

  col1  col2
0    a    1
1    s    1
2    d    1
3    f    1
4    x    2
5    y    2
6    q    3
Run Code Online (Sandbox Code Playgroud)

目前的方法:

from itertools import product

pieces = []
for _, s in df.iterrows():
    letters = list(s.col1)
    prods = list(product(letters, [s.col2]))
    pieces.append(pd.DataFrame(prods))

pd.concat(pieces)
Run Code Online (Sandbox Code Playgroud)

任何更有效的解决方法?

python dataframe pandas

15
推荐指数
5
解决办法
1621
查看次数

如何在熊猫中进行'侧视爆炸()'

我想做这个 :

# input:
        A   B
0  [1, 2]  10
1  [5, 6] -20
# output:
   A   B
0  1  10
1  2  10
2  5 -20
3  6 -20
Run Code Online (Sandbox Code Playgroud)

每列A的值都是一个列表

df = pd.DataFrame({'A':[[1,2],[5,6]],'B':[10,-20]})
df = pd.DataFrame([[item]+list(df.loc[line,'B':]) for line in df.index for item in df.loc[line,'A']],
                  columns=df.columns)
Run Code Online (Sandbox Code Playgroud)

上面的代码可以工作,但速度很慢

有什么聪明的方法吗?

谢谢

python pandas

11
推荐指数
1
解决办法
4274
查看次数

Pandas:嵌套数据框

您好,我想将数据帧存储在另一个数据帧单元格中。我有一个看起来像这样的数据在此处输入图片说明

我有包含日期​​、步数和卡路里的每日数据。此外,我有特定日期的每分钟 HR 数据。显然,将每分钟的数据放在二维列表中会很容易,但我担心以后会更难分析。
当我想在一个数据框中同时拥有两个数据时,最佳实践是什么?甚至可以嵌套数据帧吗?
有什么更好的想法吗?谢谢!

python dataframe pandas

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