小编den*_*var的帖子

两个数据帧的快速减法忽略索引(Python)

如何以最快的方式减去2个忽略索引的数据帧.

例如,我想减去:

d1=
      x1
0 -3.141593
0 -3.141593
0 -3.141593
1 -2.443461
1 -2.443461
Run Code Online (Sandbox Code Playgroud)

d2 = 
      x2
1 -2.443461
2 -1.745329
3 -1.047198
4 -0.349066
2 0.349066
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

我可以这样做,例如:

dsub = d1.reset_index(drop=True) - d2.reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)

但是,我想以最有效的方式进行减法.我一直在寻找答案,但我只看到了不考虑速度的解决方案.

我该如何做到这一点?


编辑根据一些答案,这里有一些时间在我的机器上运行:

对于较小的数据帧:

方法1(a和b):

a: d1.reset_index(drop=True) - d2.reset_index(drop=True)
b: d1.reset_index(drop=True).sub(d2.reset_index(drop=True))
~1024.91 usec/pass
Run Code Online (Sandbox Code Playgroud)

方法2:

d1 - d2.values
~784.79 usec/pass
Run Code Online (Sandbox Code Playgroud)

方法3:

pd.DataFrame(d1.values - d2.values, d1.index, ['x1-x2'])
~653.82 usec/pass
Run Code Online (Sandbox Code Playgroud)

对于非常大的数据帧,请参阅下面的@ MaxU答案.

python performance dataframe pandas

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

迭代组(Python pandas dataframe)

我想迭代按字符串或日期分组的组.

df = pd.DataFrame({'A': ['foo', 'bar'] * 3,
                   'B': ['me', 'you', 'me'] * 2,
                   'C': [5, 2, 3, 4, 6, 9]}) 
groups = df.groupby('A')
Run Code Online (Sandbox Code Playgroud)

例如,在这段代码中,我有一个名为'foo'和'bar'的组,我可以使用它们循环它们;

for name, group in groups:
   print name
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要在这个循环中运行另一个循环,每次我需要调用不同的组.喜欢(假设组的大小为n)

for name,group in groups:
   for name1 in range(name, name + 9):  # + 9 to get first 9 groups for every iteration`
Run Code Online (Sandbox Code Playgroud)

因为,name是一个我无法做到的字符串.简而言之,我只想要一种方法,通过该方法我可以按数字访问组,以便我可以轻松地调用所需的组进行计算. 就像是

groups = df.group('A')
for i in range(0,n):
    print group(i)[] + group(i+1)[]  
Run Code Online (Sandbox Code Playgroud)

所以,如果我有以下组[g1,g2,g3,g4,g5],我想迭代地成对调用它们,如[g1,g2],[g2,g3],[g3,g4] ....并采取每次都是两组系列的交集.我正在寻找通过索引或其他方式调用组[g1,g2,... g5]的方法.这样我就可以将它们用于循环操作.目前,只有我知道呼叫组的方式是通过组的名称,如上面的示例'foo'和'bar'中所述.我希望能够做以下操作:

for name,group in groups-1:
   print gb.get_group(name)
   print gb.get_group(name+1) …
Run Code Online (Sandbox Code Playgroud)

python grouping iterator dataframe pandas

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

大多数Pythonic和有效的方法在字符串末尾插入字符,如果还没有

我有一个字符串:

b = 'week'
Run Code Online (Sandbox Code Playgroud)

我想检查最后一个字符是否为"s".如果没有,请附加"s".

这个是否有Pythonic单线程?

python string

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

如何在Plotly(Python)中单独注释每个子图

我试图将一个单独的注释对象与Plotly(Python)中的每个子图关联起来,如何做到这一点?

我尝试了什么

我正在设置这样的情节:

from plotly import tools
fig = tools.make_subplots(rows=2, cols=1)
fig.append_trace(traces[0], 1, 1)
fig.append_trace(traces[1], 2, 1)
Run Code Online (Sandbox Code Playgroud)

每条迹线的形成方式如下:

import plotly.graph_objs as go
traces[0] = go.Scatter(
            x=[1,2,3,4],
            y=[4,4,2,1],
            mode='markers'
        )
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过以下方式分别访问每个子图的xaxis:

fig['layout']['xaxis1'].update(title='hello1')
fig['layout']['xaxis2'].update(title='hello2')
Run Code Online (Sandbox Code Playgroud)

但是如何访问每个子图的注释?我试过"annotations1"和"annotation1",没有运气.我还尝试通过"layout1"访问子图1的布局,如下所示:

fig['layout1'][...].update(...)
Run Code Online (Sandbox Code Playgroud)

这也不起作用.

python plot plotly

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

标签 统计

python ×4

dataframe ×2

pandas ×2

grouping ×1

iterator ×1

performance ×1

plot ×1

plotly ×1

string ×1