小编Ale*_*ley的帖子

numpy max vs amax vs maximum

numpy的具有看起来他们可被用于同样的东西三个不同的函数---不同之处在于numpy.maximum被用于逐元素,而numpy.maxnumpy.amax可以在特定轴,或所有元件一起使用.为什么不仅仅是numpy.max?在性能方面是否有一些微妙之处?

(同样适用于minvs. aminvs. minimum)

python math numpy max

99
推荐指数
3
解决办法
12万
查看次数

找到每行具有最大值的列名称

我有一个像这样的DataFrame:

In [7]:
frame.head()
Out[7]:
Communications and Search   Business    General Lifestyle
0   0.745763    0.050847    0.118644    0.084746
0   0.333333    0.000000    0.583333    0.083333
0   0.617021    0.042553    0.297872    0.042553
0   0.435897    0.000000    0.410256    0.153846
0   0.358974    0.076923    0.410256    0.153846
Run Code Online (Sandbox Code Playgroud)

在这里,我想询问如何获取每行具有最大值的列名,所需的输出如下:

In [7]:
    frame.head()
    Out[7]:
    Communications and Search   Business    General Lifestyle   Max
    0   0.745763    0.050847    0.118644    0.084746           Communications 
    0   0.333333    0.000000    0.583333    0.083333           Business  
    0   0.617021    0.042553    0.297872    0.042553           Communications 
    0   0.435897    0.000000    0.410256    0.153846           Communications 
    0   0.358974    0.076923    0.410256    0.153846           Business 
Run Code Online (Sandbox Code Playgroud)

python max dataframe pandas

97
推荐指数
4
解决办法
5万
查看次数

numpy dot()和Python 3.5+矩阵乘法之间的区别@

我最近转向Python 3.5并注意到新的矩阵乘法运算符(@)有时与numpy点运算符的行为不同.例如,对于3d数组:

import numpy as np

a = np.random.rand(8,13,13)
b = np.random.rand(8,13,13)
c = a @ b  # Python 3.5+
d = np.dot(a, b)
Run Code Online (Sandbox Code Playgroud)

@运算符返回形状的阵列:

c.shape
(8, 13, 13)
Run Code Online (Sandbox Code Playgroud)

np.dot()函数返回:

d.shape
(8, 13, 8, 13)
Run Code Online (Sandbox Code Playgroud)

如何用numpy dot重现相同的结果?还有其他重大差异吗?

python numpy matrix-multiplication python-3.5

94
推荐指数
5
解决办法
6万
查看次数

Pandas Dataframe/Numpy Array"轴"定义中的歧义

关于如何定义python轴以及它们是否引用DataFrame的行或列,我一直很困惑.请考虑以下代码:

>>> df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], columns=["col1", "col2", "col3", "col4"])
>>> df
   col1  col2  col3  col4
0     1     1     1     1
1     2     2     2     2
2     3     3     3     3
Run Code Online (Sandbox Code Playgroud)

因此,如果我们打电话df.mean(axis=1),我们将获得跨行的平均值:

>>> df.mean(axis=1)
0    1
1    2
2    3
Run Code Online (Sandbox Code Playgroud)

但是,如果我们调用df.drop(name, axis=1),我们实际上会删除一列而不是一行:

>>> df.drop("col4", axis=1)
   col1  col2  col3
0     1     1     1
1     2     2     2
2     3     3     3
Run Code Online (Sandbox Code Playgroud)

有人能帮助我理解pandas/numpy/scipy中"轴"的含义吗?

旁注,DataFrame.mean可能被定义错了.它在文档中说, …

python arrays numpy dataframe pandas

81
推荐指数
4
解决办法
2万
查看次数

为什么numpy std()给matlab std()一个不同的结果?

我尝试将matlab代码转换为numpy,并发现numpy与std函数有不同的结果.

在matlab中

std([1,3,4,6])
ans =  2.0817
Run Code Online (Sandbox Code Playgroud)

在numpy

np.std([1,3,4,6])
1.8027756377319946
Run Code Online (Sandbox Code Playgroud)

这是正常的吗?我该怎么处理呢?

python matlab numpy standard-deviation

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

在pandas中改组/置换DataFrame

在pandas中,按行或按列对数据帧进行随机播放的简单有效方法是什么?即如何编写一个函数shuffle(df, n, axis=0),它接受一个数据帧,一些shuffle n和一个轴(axis=0是行,axis=1是列),并返回已经洗牌n次数的数据帧的副本.

编辑:关键是在不破坏数据帧的行/列标签的情况下执行此操作.如果你只是洗牌df.index,那就失去了所有的信息.我希望结果df与原始相同,除了行的顺序或列的顺序不同.

编辑2:我的问题不清楚.当我说洗牌行时,我的意思是每行独立洗牌.因此,如果您有两列,a并且b我希望每行都自行进行洗牌,那么如果您只是重新排序每一行,那么您之间a和之间的关联就不b一样了.就像是:

for 1...n:
  for each col in df: shuffle column
return new_df
Run Code Online (Sandbox Code Playgroud)

但希望比天真循环更有效.这对我不起作用:

def shuffle(df, n, axis=0):
        shuffled_df = df.copy()
        for k in range(n):
            shuffled_df.apply(np.random.shuffle(shuffled_df.values),axis=axis)
        return shuffled_df

df = pandas.DataFrame({'A':range(10), 'B':range(10)})
shuffle(df, 5)
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

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

使用pandas比较两列

以此为出发点:

a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])

Out[8]: 
  one  two three
0   10  1.2   4.2
1   15  70   0.03
2    8   5     0
Run Code Online (Sandbox Code Playgroud)

我想if在熊猫中使用类似声明的东西.

if df['one'] >= df['two'] and df['one'] <= df['three']:
    df['que'] = df['one']
Run Code Online (Sandbox Code Playgroud)

基本上,通过if语句检查每一行,创建新列.

文档说要使用,.all但没有例子......

python if-statement dataframe pandas

66
推荐指数
6
解决办法
19万
查看次数

Python Pandas read_csv跳过行但保留标题

我无法弄清楚如何跳过csv文件中的n行,但保留标题为1行.

我想要做的是迭代,但保持第一行的标题. skiprows使标题成为跳过行之后的第一行.这样做的最佳方式是什么?

data = pd.read_csv('test.csv', sep='|', header=0, skiprows=10, nrows=10)
Run Code Online (Sandbox Code Playgroud)

python csv pandas

63
推荐指数
2
解决办法
5万
查看次数

NumPy的数学函数是否比Python快?

我有一个由基本数学函数(abs,cosh,sinh,exp,...)组合定义的函数.

我想知道它是否有所作为(速度)使用,例如, numpy.abs()而不是abs()

python performance numpy

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

计算Dataframe每列中的非NaN条目数

我有一个非常大的DataFrame,我想知道是否有短(一或两个班轮)方式来获取DataFrame中非NaN条目的数量.我不希望一次只做一列,因为我有接近1000列.

df1 = pd.DataFrame([(1,2,None),(None,4,None),(5,None,7),(5,None,None)], 
                    columns=['a','b','d'], index = ['A', 'B','C','D'])

    a   b   d
A   1   2 NaN
B NaN   4 NaN
C   5 NaN   7
D   5 NaN NaN
Run Code Online (Sandbox Code Playgroud)

输出:

a: 3
b: 2
d: 1
Run Code Online (Sandbox Code Playgroud)

python count nan dataframe pandas

57
推荐指数
2
解决办法
5万
查看次数