我有一个由日期和值列组成的数据框,有点像这样:
>>> 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)
我想,以取代所有的value1在df['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) 我正在尝试在名为 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) 假设我有以下 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)
谢谢
题:
给定一个包含如下数据的数据框:
>>> 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) 我有一个如下形式的熊猫数据框:
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)
结果矩阵将是: …
假设我的数据帧格式如下:
id | name | 052017 | 062017 | 072017 | 092017 | 102017
20 | abcd | 0 | 100 | 200 | 50 | 0
Run Code Online (Sandbox Code Playgroud)
我需要检索组织有任何交易的上个月的列名.在这种情况下,我想添加一个名为"date_string"的列,它将092017作为其内容.
有没有办法实现这个目标?
谢谢!
我正在学习更多关于 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 函数似乎很接近,但我不知道如何让它做我想要的。谢谢
假设我在 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) 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中的其他字典一起保存,但这不是必需的.
我有一个像这样的数组:
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)