小编sac*_*cuL的帖子

如果满足不同行中的条件,则替换数据框中的字符串

我有一个由日期和值列组成的数据框,有点像这样:

>>> df
         date   value
0  2016-09-10  value1
1  2016-09-10  value1
2  2016-09-10  value2
3  2016-09-10  value1
4  2016-09-12  value3
5  2016-09-12  value1
6  2016-09-13  value2
7  2016-09-13  value1
Run Code Online (Sandbox Code Playgroud)

我想,以取代所有的value1df['value']那年秋天上,日期“2016年9月10日” value7。日期列是一个字符串系列。

我查看了 的文档pd.DataFrame.replace(),但找不到基于单独列的条件替换的参数。想到很多丑陋的方法来完成这项工作(for循环 with.loc可以解决问题),但是有没有人知道一个很好的,一两行,更pythonic的方法来做到这一点?提前致谢!

如果您希望此迷你虚拟数据框进行试验:

import pandas as pd

data = {'date': ['2016-09-10', '2016-09-10',
                 '2016-09-10', '2016-09-10',
                 '2016-09-12', '2016-09-12',
                 '2016-09-13', '2016-09-13'],
        'value': ['value1', 'value1', 'value2', 'value1',
                  'value3', 'value1', 'value2', 'value1']}

df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)

python pandas

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

删除 groupby 中的重复行?

我正在尝试在名为 volume 的数据框中创建一个新列。DF 已经包含其他列,如市场。我想要做的是按价格和公司分组,然后获取它们的数量并将其添加到一个名为 volume 的新列中。这是我所拥有的:

df['volume'] = df.groupby(['price', 'company']).transform('count')
Run Code Online (Sandbox Code Playgroud)

这确实创建了一个新列,但是,它给了我所有的行。我不需要所有的行。例如,在转换之前我会得到 4 行,而在转换之后我仍然得到 4 行但有一个新列。

market  company   price    volume
LA      EK        206.0     2
LA      SQ        206.0     1
LA      EK        206.0     2
LA      EK        36.0      3
LA      EK        36.0      3
LA      SQ        36.0      1
LA      EK        36.0      3
Run Code Online (Sandbox Code Playgroud)

我想删除重复的行。有没有我可以用 groupby 做的查询,它只会显示这样的行:

market  company   price    volume
LA      EK        206.0     2
LA      SQ        206.0     1
LA      SQ        36.0      1
LA      EK        36.0      3
Run Code Online (Sandbox Code Playgroud)

python pandas

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

然后在给定范围内替换numpy数组元素

假设我有以下 numpy 数组。

arr = np.array( [ 1.0, 1.1, 1.44, 1.8, 1.0, 1.67, 1.23, 1.0] )
Run Code Online (Sandbox Code Playgroud)

我可以用 0.0 替换所有等于 1.0 的元素,只需使用以下行。

arr[arr==1.0] = 0.0
Run Code Online (Sandbox Code Playgroud)

我怎么能在不运行 for 循环的情况下用 1.0 替换 1.0 - 1.5 之间的所有元素。

基本上我要问的是如何执行以下操作

arr[arr>1.0 and arr<1.5] = 1.0
Run Code Online (Sandbox Code Playgroud)

谢谢

python arrays numpy

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

在pandas中具有运行编号的新列,有条件地递增

题:

给定一个包含如下数据的数据框:

>>> df
    data
0  START
1   blah
2   blah
3   blah
4   blah
5    END
6  START
7   blah
8   blah
9    END
Run Code Online (Sandbox Code Playgroud)

分配具有每次递增的运行数的新列的最有效方法是什么START?这是我想要的结果:

>>> df
    data  number
0  START       1
1   blah       1
2   blah       1
3   blah       1
4   blah       1
5    END       1
6  START       2
7   blah       2
8   blah       2
9    END       2
Run Code Online (Sandbox Code Playgroud)

我做了什么

这很好,但速度很慢(这将适用于更大的数据帧,我相信有更好的方法可以做到这一点:

counter = 0
df = df.assign(number = 0)
for i, row in df.iterrows():
    if row['data'] == …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

熊猫数据框到邻接矩阵

我有一个如下形式的熊猫数据框:

index | id    | group
0     | abc   | A
1     | abc   | B
2     | abc   | B
3     | abc   | C
4     | def   | A
5     | def   | B
6     | ghi   | B
7     | ghi   | C
Run Code Online (Sandbox Code Playgroud)

我想将其转换为加权图/邻接矩阵,其中节点是“组”,权重是每组对共享 ID 的总和:

权重是每个 id 的组对组合的计数,因此:

AB = 'abc' indexes (0,1),(0,2) + 'def' indexes (4,5) = 3

AC = 'abc' (0,3) = 1

BC = 'abc' (2,3), (1,3) + 'ghi' (6,7) = 3
Run Code Online (Sandbox Code Playgroud)

结果矩阵将是: …

python matrix dataframe data-structures pandas

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

检索Pandas上个月交易的列名

假设我的数据帧格式如下:

id | name | 052017 | 062017 | 072017 | 092017 | 102017

20 | abcd |  0     | 100    | 200    | 50     | 0
Run Code Online (Sandbox Code Playgroud)

我需要检索组织有任何交易的上个月的列名.在这种情况下,我想添加一个名为"date_string"的列,它将092017作为其内容.

有没有办法实现这个目标?

谢谢!

python pandas

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

从多个列表创建 Python Numpy 数组

我正在学习更多关于 numpy 的知识,需要帮助从多个列表创建一个 numpy 数组。假设我有 3 个列表,

a = [1, 1, 1] 
b = [2, 2, 2] 
c = [3, 3, 3] 
Run Code Online (Sandbox Code Playgroud)

如何创建一个新的 numpy 数组,每个列表作为一列?这意味着新数组将是[[1, 2, 3], [1, 2, 3], [1, 2, 3]]. 我知道如何通过遍历列表来做到这一点,但我不确定是否有更简单的方法来实现这一点。numpy concatenate 函数似乎很接近,但我不知道如何让它做我想要的。谢谢

python arrays numpy

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

如何提取numpy结构化数组中满足某些条件的行?

假设我在 numpy 中创建结构化数组:

name = ['Tom' , 'Jim', 'Alice', 'Alice', 'Greg']
height = [188, 160, 160, 157, 180]
pet = ['dog', 'cat', 'fish', 'dog', 'cat']

a = np.zeros(len(name), dtype=[('name', 'U30'), ('height', 'i'), ('pet', 'U30')])

a['name'] = name
a['height'] = height
a['pet'] = pet
Run Code Online (Sandbox Code Playgroud)

numpy 有没有办法提取满足某些条件的行。例如:

'height' == 160 and 'pet' == 'cat'
Run Code Online (Sandbox Code Playgroud)

python numpy

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

基于另外两个列和表在pandas中创建列

table = pd.DataFrame(data=[[1,2,3],[4,5,6],[7,8,9]],
                 columns=['High','Middle','Low'],
                index=['Blue','Green','Red'])

df = pd.DataFrame(data=[['High','Blue'],
                    ['High','Green'],
                    ['Low','Red'],
                   ['Middle','Blue'],
                    ['Low','Blue'],
                    ['Low','Red']],
             columns=['A','B'])

>>> df
        A      B
0    High   Blue
1    High  Green
2     Low    Red
3  Middle   Blue
4     Low   Blue
5     Low    Red

>>> table
       High  Middle  Low
Blue      1       2    3
Green     4       5    6
Red       7       8    9
Run Code Online (Sandbox Code Playgroud)

我正在尝试添加第三列"C",它基于表中的值.所以第一行的值为1,第二行的值为4等.

如果这将是一维查找我会将表转换为字典并将使用df['C'] = df['A'].map(table).但是由于这是二维的,我无法弄清楚如何使用地图或应用.

理想情况下,我会将表转换为字典格式,因此我将其与json中的其他字典一起保存,但这不是必需的.

python mapping dictionary pandas

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

Python根据另一个数组中的索引创建一个数组

我有一个像这样的数组:

X= [[1,2,3],
    [3,2,1],
    [2,1,3]]
Run Code Online (Sandbox Code Playgroud)

现在我想创建另一个数组 Y。在 X 中的元素等于 2 的位置,Y 中的元素应取值 1,否则它们应取值 0。在此示例中,Y 应等于

Y=[[0,1,0],
   [0,1,0],
   [1,0,0]]
Run Code Online (Sandbox Code Playgroud)

python arrays

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