小编Ant*_*y W的帖子

加速大熊猫数据框中的iloc解决方案

我有以下内容DataFrame:

dates = pd.date_range('20150101', periods=4)
df = pd.DataFrame({'A' : [5,10,3,4]}, index = dates)

df.loc[:,'B'] = 0
df.loc[:,'C'] = 0
df.iloc[0,1]  = 10
df.iloc[0,2]  = 3

print df

Out[69]:

             A   B  C
2015-01-01   5  10  3
2015-01-02  10   0  0
2015-01-03   3   0  0
2015-01-04   4   0  0
Run Code Online (Sandbox Code Playgroud)

我要实现对列下面的逻辑BC:

  • B(k+1) = B(k) - A(k+1)
  • C(k+1) = B(k) + A(k+1)

我可以使用以下代码执行此操作:

for i in range (1, df.shape[0]): 
        df.iloc[i,1] = df.iloc[i-1,1] - df.iloc[i,0] 
        df.iloc[i,2] = df.iloc[i-1,1] + …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

8
推荐指数
2
解决办法
1830
查看次数

将节点添加到断开连接的图中,以便完全连接图组件,并具有节点间距离约束

我有一个图,其中每个节点都有一个由 (x,y) 给定的空间位置,并且仅当每个节点之间的欧几里得距离为sqrt(2)或更小时,节点之间的边才会连接。这是我的例子:

import networkx

G=nx.Graph()

G.add_node(1,pos=(1,1))
G.add_node(2,pos=(2,2))
G.add_node(3,pos=(1,2))

G.add_node(4,pos=(1,4))
G.add_node(5,pos=(2,5))

G.add_node(6,pos=(4,2))
G.add_node(7,pos=(5,2))
G.add_node(8,pos=(5,3))

# Connect component one
G.add_edge(1,2)
G.add_edge(1,3)
G.add_edge(2,3)

# Connect component two
G.add_edge(6,7)

# Connect component three
G.add_edge(6,8)
G.add_edge(7,8)
G.add_edge(4,5)

pos=nx.get_node_attributes(G,'pos')

nx.draw(G,pos)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我的问题是,如何确定附加节点的最佳位置和数量,以便连接图形组件,同时确保任何附加节点始终位于现有节点的sqrt(2)内?

python optimization graph networkx

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

Facebook 先知,Python 中的非日常数据

我有几个半小时的数据。它的形式是:

05/10/2017 00:00:00,    116.297
05/10/2017 00:30:00,    7.3748
05/10/2017 01:00:00,    -94.8402
05/10/2017 01:30:00,    41.0546
05/10/2017 02:00:00,    206.3658
05/10/2017 02:30:00,    -283.0569
05/10/2017 03:00:00,    -656.2
05/10/2017 03:30:00,    631.2834
Run Code Online (Sandbox Code Playgroud)

我想对接下来的 24 小时(即 48 个半小时)进行预测。我的代码似乎给出了比这更长的预测。见情节:

在此处输入图片说明

这里是:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from fbprophet import Prophet

# Load data
file_name = "test_data.csv"
df = pd.read_csv(file_name,parse_dates=[0])

#Fit the model
m = Prophet().fit(df)

#Make predictions
future = m.make_future_dataframe(periods=48, freq=H)

fcst = m.predict(future)
m.plot(fcst)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我没有make_future_dataframe正确设置方法吗?

python facebook-prophet

6
推荐指数
2
解决办法
4333
查看次数

在 r 中的两个 sf POINT 特征之间绘制线条

我有两个空间特征:

library(sf)

points1 <- data.frame(foo = seq(15, 75, 15), 
                     long = c(-85, -80, -78, -75, -82), 
                     lat = c(34, 36, 37, 38, 35)) %>% 
    st_as_sf(coords = c('long', 'lat'), crs = 4326) 

points2 <- data.frame(bar = seq(15, 75, 15), 
                     long = c(85, 80, 78, 75, 82), 
                     lat = c(30, 32, 34, 36, 38)) %>% 
    st_as_sf(coords = c('long', 'lat'), crs = 4326) 

cbind(points1, points2) -> df
Run Code Online (Sandbox Code Playgroud)

这给出:

  foo bar       geometry    geometry.1
1  15  15 POINT (-85 34) POINT (85 30)
2  30 …
Run Code Online (Sandbox Code Playgroud)

r r-sf

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

Python 列表理解和 JSON 解析

我是 Python 新手,试图找出使用列表理解将 JSON 对象的值解析为数组的最佳方法。

这是我的代码 - 我正在查询公开可用的 iNaturalist API,并希望获取它返回的 JSON 对象,以便我将 JSON 对象的特定部分放入凹凸数组中:

import json
import urllib2

#Set Observations URL request for Resplendent Quetzal of Costa Rica
query = urllib2.urlopen("http://api.inaturalist.org/v1/observations?place_id=6924&taxon_id=20856&per_page=200&order=desc&order_by=created_at")
obSet = json.load(query)

#Print out Lat Long of observation
n = obSet['total_results']

for i in range(n) :
    print obSet['results'][i]['location'] 
Run Code Online (Sandbox Code Playgroud)

这一切都工作正常并给出以下输出:

9.5142456535,-83.8011438905
10.2335478381,-84.8517773638
10.3358965682,-84.9964271008
10.3744851815,-84.9871494128
10.2468720343,-84.9298072822
...
Run Code Online (Sandbox Code Playgroud)

接下来我想做的是将 for 循环替换为列表理解,并将位置值存储在元组中。我正在努力解决语法问题,因为我猜它是这样的:

[(long,lat) for i in range(n) for (long,lat) in obSet['results'][i]['location']]
Run Code Online (Sandbox Code Playgroud)

但这不起作用...感谢您的帮助。

python json list-comprehension

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

具有初始值的 Pandas cumsum

因此,给出以下单列数据框:

from pandas import DataFrame
df = DataFrame({0: {'10/10/2012': 50, '10/11/2012': -10, '10/12/2012': 100})

In [3]: df
Out[3]: 
              0   
10/10/2012   50   
10/11/2012  -10  
10/12/2012  100  
Run Code Online (Sandbox Code Playgroud)

我想为给定列创建累积和,但给累加器一个初始值。因此,对于上面的数据帧,初始值为 100,这将如下所示:

              0  1 
10/10/2012   50  150 
10/11/2012  -10  140
10/12/2012  100  240
Run Code Online (Sandbox Code Playgroud)

任何帮助,非常感谢。

python pandas cumsum

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

使用Python numpy where条件将整数更改为低于特定值

这是我的数组:

import numpy as np
a = np.array([0, 5.0, 0, 5.0, 5.0])
Run Code Online (Sandbox Code Playgroud)

是否可以通过numpy.where某种方式x为所有a小于的值增加一个值l

所以像这样:

a = a[np.where(a < 5).add(2.5)]
Run Code Online (Sandbox Code Playgroud)

应该返回:

array([2.5, 5.0, 2.5, 5.0, 5.0])
Run Code Online (Sandbox Code Playgroud)

python arrays numpy where

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

haskell scanl元组

我有一个元组列表:

myList = [(1,1000), (2,2000), (3,3000),(4,4000]
Run Code Online (Sandbox Code Playgroud)

我想处理这个列表,以便每个元组的第一个元素保持不变,第二个元素是累积元素.所以对于上面的myList,它看起来像这样:

[(1,1000),(2,3000),(3,6000),(4,10000)]
Run Code Online (Sandbox Code Playgroud)

我已经尝试编写一个使用scanl1但不会编译的函数:

myFunction myList = scanl1 f l
           where f = (\acc (x,y) -> (x, acc + y))
Run Code Online (Sandbox Code Playgroud)

任何帮助,非常感谢

haskell tuples fold

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

Elixir阻止了GenServer进程

我有一个简单的GenServer内容,我希望创建一个每两秒调用一次函数的循环:

defmodule MyModule do
  use GenServer

  def start_link(time) do
    GenServer.start_link(__MODULE__,time)
  end

  #Start loop
  def init(time) do
    {:ok, myLoop(time)}
  end

  #Loop every two seconds
  def myLoop(time) do

    foo = bah(:someOtherProcess, {time})
    IO.puts("The function value was: #{foo}")
    :timer.sleep(2000)
    myLoop(time + 2)
  end
end 
Run Code Online (Sandbox Code Playgroud)

但是当我打电话给:

{:ok, myServer} =MyModule.start_link(time)
IO.puts("Now I can carry on...")
Run Code Online (Sandbox Code Playgroud)

我从来没有看到上述电话的回复.我觉得这很明显.所以我的问题是,如何在不阻止下游执行任务的过程的情况下创建我想要的循环?

谢谢.

elixir blocking gen-server

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

跨两个数据帧应用 case_when

我有两个数据框:

df1 <- data.frame(A = c(1, 2, 3), B = c(0,0,3), C = c(3,2,1)) 
df2 <- data.frame(A = c(0, 2, 4), B = c(1,0,3), C = c(0,1,4))
Run Code Online (Sandbox Code Playgroud)

我想通过在df1df2之间应用一些条件逻辑,通过比较等效命名的列之间的条目来生成第三个数据框。所以逻辑是:

df1$A == 0 and df2$A>0         ~ df3$A = "colonised"
df1$A < df2$A and df1$A != 0   ~ df3$A = "increased"
df1$A == df2$A and df1$A >0    ~ df3$A = "stable"
df1$A > df2$A  and df2$A != 0  ~ df3$A = "decreased"
df1$A>0 and df2$A == 0         ~ df3$A …
Run Code Online (Sandbox Code Playgroud)

r dataframe

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