小编DGr*_*ham的帖子

np.where多个返回值

使用pandas和numpy我正在尝试处理数据框中的列,并希望创建一个包含与之相关的值的新列.因此,如果在列x中存在值1,则在新列中它将是a,对于值2,它将是b等

我可以针对单一条件这样做,即

df['new_col'] = np.where(df['col_1'] == 1, a, n/a)
Run Code Online (Sandbox Code Playgroud)

我可以找到多个条件的例子,即如果x = 3或x = 4,则该值应该是a,但是如果x = 3,则该值应为a,如果x = 4,则该值为c.

我试过简单地运行两行代码,例如:

df['new_col'] = np.where(df['col_1'] == 1, a, n/a)
df['new_col'] = np.where(df['col_1'] == 2, b, n/a)
Run Code Online (Sandbox Code Playgroud)

但显然第二行会覆盖.我错过了一些关键的东西吗

python numpy pandas

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

计算多列的平均值,忽略NaN pandas numpy

我有一个基本的价值表:

import pandas as pd
import numpy as np
test = pd.read_csv('mean_test.csv')
test.replace('n/a',np.nan)
test


value1  value2  value3
1   9   5
5   NaN 4
9   55  NaN
NaN 4   9
Run Code Online (Sandbox Code Playgroud)

我想计算三个值的平均值,忽略NaN,所以对于第二行,它将是(5 + 4)/ 2.因此我不能使用.replace函数在NaN的位置放置零.我已经搜索了其他一些问题,但找不到任何涵盖此问题的内容.我错过了一些明显的东西吗

python pandas

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

合并和求和两个匹配python pandas的数据帧

我可能正在接近这是错误的方式.如果我有两个数据帧a和b:

数据帧A:

a b c
1 2 4
1 6 5
1 8 7
Run Code Online (Sandbox Code Playgroud)

和Dataframe B:

a b c d
1 2 4 9
1 6 5 7
1 8 7 10
Run Code Online (Sandbox Code Playgroud)

我想加入它们,但是暂时将列名匹配的列加起来,并保留不匹配的列名.所以最终的连接表看起来像:

a   b   c   d
2   4   8   9
2   12  10  7
2   16  14  10
Run Code Online (Sandbox Code Playgroud)

注意:索引始终匹配(即相同顺序的记录数相同)

python pandas

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

对列进行排名并选择列名称

如果我有桌子:

a   b   c
15  15  5
20  10  7
25  30  9
Run Code Online (Sandbox Code Playgroud)

并且想要做两件事1)选择轴上具有最高值的列并将其分配给列2)获取值并将其分配给另一列,例如:

a   b   c   1st 1st_value   2nd 2nd_value   3rd 3rd_value
15  15  5   a/b 15  c   5   NaN NaN
20  10  7   a   20  b   10  c   7
25  30  9   b   30  a   25  c   9
Run Code Online (Sandbox Code Playgroud)

这可能吗?

python pandas

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

高级聚合熊猫python

如果我有一个简单的表,例如:

index   location     col1   col2    col3    col4
    1          a     TRUE    yes       1       4
    2          a    FALSE   null       2       6
    3          b     TRUE   null       6       3
    4          b     TRUE     no       3       4
    5          b    FALSE    yes       4       6
    6          c     TRUE     no      57       8
    7          d    FALSE   null      74       9
Run Code Online (Sandbox Code Playgroud)

如果我想聚合位置中的重复记录,即两个 a 或三个 b,我一直在使用基本的 groupby 函数。这适用于简单的表。

但是,是否可以扩展此功能以在聚合时允许每列规则?作为 col1 的示例,如果 TRUE 存在,它将胜过任何 FALSE 值,或者在 col3 中,它将对值求和,而在 col4 中它添加计算平均值?是否可以为每列定义这些规则,然后在使用 groupby 时应用它们?

我在网上搜索过,但没有找到任何似乎可以涵盖这一点的内容,但是我可能找错了树。

谢谢。

python group-by dataframe pandas pandas-groupby

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

填充前一列中的空白单元格 pandas python

如果我有一个简单的数据框,例如:

q_1     q_1_mark    q_2    q_2_mark
TRUE    a           1      c
FALSE   b           2   
TRUE    c           3   
Run Code Online (Sandbox Code Playgroud)

我如何填写 q_2_mark 列的空白值,使它们与 q_1_mark 匹配?所以步骤是:

  1. 查看该列并找到空白值。
  2. 查看前面的 _mark 列并仅显示空白单元格的值。

我可以进行强力复制和粘贴样式格式设置,但这会丢失包含与前一列不同的任何单元格,即 a --> c

python dataframe pandas

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

pandas排序列错过了值

不确定正确的标题.但我需要从数据框中取出一个列,并显示前五个结果.该列是整数和不适合结果的混合.作为一个例子,我创建了一个基本数据帧:

regiona col1
a   n/a
a   1
a   200
b   208
b   400
b   560
b   600
c   800
c   1120
c   1200
c   1680
d   n/a
d   n/a
Run Code Online (Sandbox Code Playgroud)

所以运行:

import pandas as pd
df = pd.read_csv('test_data.csv')
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个基本函数,所以我可以在不同的列上使用它,所以构造:

def max_search(indicator):
    displaced_count = df[df[indicator] != 'n/a']
    table = displaced_count.sort_values([indicator], ascending=[False])
    return table.head(5)
Run Code Online (Sandbox Code Playgroud)

但是当我跑步的时候

max_search('col1')
Run Code Online (Sandbox Code Playgroud)

它返回:

    regiona col1
7         c  800
6         b  600
5         b  560
4         b  400
3         b  208
Run Code Online (Sandbox Code Playgroud)

所以它错过了大于800的任何东西.我认为该功能应该做的步骤是:

  1. 过滤掉n/a valyes
  2. 返回前五个值.

但是,它没有返回超过800的东西?我错过了很明显的东西吗?

python pandas

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

如果声明数字在一个范围内

我无法调整它,因为它只响应1到100之间的值.我知道它的简单,但通过搜索找不到任何东西.

while True:
    Mynumber = raw_input('Enter number of random points')
    if Mynumber == '0 < 100':
            print 'number choosen'
            Mynumber = int(Mynumber)
            break
Run Code Online (Sandbox Code Playgroud)

python if-statement

0
推荐指数
1
解决办法
538
查看次数