我觉得这应该很容易完成,但我无法弄清楚如何.我有一个pandas DataFrame列日期:
0 2012-08-21
1 2013-02-17
2 2013-02-18
3 2013-03-03
4 2013-03-04
Name: date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
我希望有一列持续时间,例如:
0 0
1 80 days
2 1 day
3 15 days
4 1 day
Name: date, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
我的尝试产生了大量的0天NaT而是:
>>> df.date[1:] - df.date[:-1]
0 NaT
1 0 days
2 0 days
...
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我与在以下面板数据的工作MultiIndex大熊猫DataFrame叫df_data:
y x
n time
0 0 0.423607 -0.307983
1 0.565563 -0.333430
2 0.735979 -0.453137
3 0.962857 1.671106
1 0 0.772304 1.221366
1 0.455327 -1.024852
2 0.864768 0.609867
3 0.334429 -2.567936
2 0 0.435553 -0.259228
1 0.221501 0.484677
2 0.773628 0.650288
3 0.293902 0.566452
Run Code Online (Sandbox Code Playgroud)
n索引一个人(其中有500个),t索引时间.这是一个平衡的面板.我想创建一个随机抽样的nn=100个人样本.此外,如果个人将其作为随机样本,则应将该个体的所有4次观察(t = 0,1,2,3)分配给样本.
以下几行几乎是我想要的:
df_sample = df_data.loc[np.random.randint(3, size=100).tolist()]
Run Code Online (Sandbox Code Playgroud)
但是,它不会反复对个人进行抽样.因此,如果创建的随机变量列表是[2,3,2,4,1,...],则第三个人(index = 2是第三个人)仅被选择一次而不是随机样本的两次.这意味着只要上面的随机向量包含同一个体不止一次,我就会在随机样本中得到少于100个个体(每次有4次观察).我也尝试过这个df_data.sample函数,但我似乎无法处理面板中的特定多级索引.我可以编写各种循环来完成这项工作,但我认为应该有一种更简单(更快)的方法.我使用的是Python 3.5,我使用的是pandas版本0.17.1.谢谢.
我有时间序列数据,如下:
emplvl
date
2003-01-01 10955.000000
2003-04-01 11090.333333
2003-07-01 11157.000000
2003-10-01 11335.666667
2004-01-01 11045.000000
2004-04-01 11175.666667
2004-07-01 11135.666667
2004-10-01 11480.333333
2005-01-01 11441.000000
2005-04-01 11531.000000
2005-07-01 11320.000000
2005-10-01 11516.666667
2006-01-01 11291.000000
2006-04-01 11223.000000
2006-07-01 11230.000000
2006-10-01 11293.000000
2007-01-01 11126.666667
2007-04-01 11383.666667
2007-07-01 11535.666667
2007-10-01 11567.333333
2008-01-01 11226.666667
2008-04-01 11342.000000
2008-07-01 11201.666667
2008-10-01 11321.000000
2009-01-01 11082.333333
2009-04-01 11099.000000
2009-07-01 10905.666667
Run Code Online (Sandbox Code Playgroud)
我想以最简单的方式在该图上添加线性趋势(带截距).此外,我想计算这一趋势,仅以2006年之前的数据为条件.
我在这里找到了一些答案,但它们都包括在内statsmodels.首先,这些答案可能不是最新的:pandas改进,现在本身包括一个OLS组件.其次,statsmodels似乎估计每个时间段的个体固定效应,而不是线性趋势.我想我可以重新计算一个运行季度变量,但是大多数人都有更舒服的方法吗?
OLS Regression Results
==============================================================================
Dep. Variable: emplvl R-squared: 1.000
Model: OLS Adj. R-squared: nan
Method: …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Pandas和matplotlib来执行一些数据可视化,我想在散点图中添加一条最适合的线.
这是我的代码:
import matplotlib
import matplotlib.pyplot as plt
import pandas as panda
import numpy as np
def PCA_scatter(filename):
matplotlib.style.use('ggplot')
data = panda.read_csv(filename)
data_reduced = data[['2005', '2015']]
data_reduced.plot(kind='scatter', x='2005', y='2015')
plt.show()
PCA_scatter('file.csv')
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
我正在使用 Windows 并学习使用 tensorflow,所以我需要在 Docker(工具箱)下运行它。
按照通常的说明:
$ docker run -it gcr.io/tensorflow/tensorflow
Run Code Online (Sandbox Code Playgroud)
我可以在我的浏览器上启动一个 Jupyter notebook192.168.99.100:8888并运行教程 notebook 没有问题。
现在,当我尝试import pandas as pd使用 pip 安装在我的计算机上时,在 Juypter 上它只是说ImportError: No module named pandas
知道如何让这个库在从 docker 启动的 tensorflow 图像中工作吗?
我有一个模糊的字符串匹配脚本,在400万公司名称的大海捞针中寻找大约30K针.虽然脚本工作正常,但我在AWS h1.xlarge上通过并行处理加速处理的尝试失败了,因为我的内存不足.
我不想试图获得更多内存,而是根据我之前的问题解释,我想找出如何优化工作流程 - 我对此很新,所以应该有足够的空间.顺便说一句,我已经尝试过排队(虽然工作但是遇到了同样的问题MemoryError,再看看一堆非常有用的SO贡献,但还没有完成.)
这是与代码最相关的内容.我希望它足以澄清逻辑 - 很高兴根据需要提供更多信息:
def getHayStack():
## loads a few million company names into id: name dict
return hayCompanies
def getNeedles(*args):
## loads subset of 30K companies into id: name dict (for allocation to workers)
return needleCompanies
def findNeedle(needle, haystack):
""" Identify best match and return results with score """
results = {}
for hayID, hayCompany in haystack.iteritems():
if not isnull(haystack[hayID]):
results[hayID] = levi.setratio(needle.split(' '),
hayCompany.split(' '))
scores = list(results.values()) …Run Code Online (Sandbox Code Playgroud) python performance memory-management multiprocessing string-matching
我正在使用python中的数据框如何过滤所有具有特定列值的行,例如val,它们属于第1和第3四分位数.
谢谢.
我有两个DataFrames:
import pandas as pd
import io
from scipy import stats
ctrl=u"""probegenes,sample1,sample2,sample3
1415777_at Pnliprp1,20,0.00,11
1415884_at Cela3b,47,0.00,100
1415805_at Clps,17,0.00,55
1115805_at Ckkk,77,10.00,5.5
"""
df_ctrl = pd.read_csv(io.StringIO(ctrl),index_col='probegenes')
test=u"""probegenes,sample1,sample2,sample3
1415777_at Pnliprp1,20.1,10.00,22.3
1415805_at Clps,7,3.00,1.5
1415884_at Cela3b,47,2.01,30"""
df_test = pd.read_csv(io.StringIO(test),index_col='probegenes')
Run Code Online (Sandbox Code Playgroud)
它们看起来像这样:
In [35]: df_ctrl
Out[35]:
sample1 sample2 sample3
probegenes
1415777_at Pnliprp1 20 0 11.0
1415884_at Cela3b 47 0 100.0
1415805_at Clps 17 0 55.0
1115805_at Ckkk 77 10 5.5
In [36]: df_test
Out[36]:
sample1 sample2 sample3
probegenes
1415777_at Pnliprp1 20.1 10.00 22.3
1415805_at Clps …Run Code Online (Sandbox Code Playgroud) 我正在寻找创建一个数据框架,该数据框架是两个不相关的系列的组合。
如果我们采用两个数据框:
A = ['a','b','c']
B = [1,2,3,4]
dfA = pd.DataFrame(A)
dfB = pd.DataFrame(B)
Run Code Online (Sandbox Code Playgroud)
我正在寻找此输出:
A B
0 a 1
1 a 2
2 a 3
3 a 4
4 b 1
5 b 2
6 b 3
7 b 4
8 c 1
9 c 2
10 c 3
11 c 4
Run Code Online (Sandbox Code Playgroud)
一种方法可能是使列表直接循环并创建DataFrame,但必须有更好的方法。我确定我在熊猫文件中遗漏了一些东西。
result = []
for i in A:
for j in B:
result.append([i,j])
result_DF = pd.DataFrame(result,columns=['A','B'])
Run Code Online (Sandbox Code Playgroud)
最终,我正在考虑将月份和UUID结合起来,可以正常工作,但是计算需要花费很多时间,并且对索引的依赖过多。通用解决方案显然会更好:
from datetime import datetime
start = datetime(year=2016,month=1,day=1)
end = datetime(year=2016,month=4,day=1) …Run Code Online (Sandbox Code Playgroud) 我DataFrame喜欢这样的:
Name first_seen last_seen
0 Random guy 1 5/22/2016 18:12 5/22/2016 18:15
1 Random guy 2 5/22/2016 12:03 5/22/2016 12:03
2 Random guy 3 5/22/2016 21:06 5/22/2016 21:06
3 Random guy 4 5/22/2016 16:20 5/22/2016 16:20
4 Random guy 5 5/22/2016 14:46 5/22/2016 14:46
Run Code Online (Sandbox Code Playgroud)
现在我必须添加一个columnnamed Visit_period,[morning,afternoon,evening,night]当该person(row)花费的最长时间落入时,它将获取4个值中的一个:
- morning: 08:00 to 12:00 hrs
- afternoon: 12:00 to 16:00 hrs
- evening: 16:00 to 20:00 hrs
- night: 20:00 to 24:00 hrs
Run Code Online (Sandbox Code Playgroud)
所以对于上面的五行输出将是这样的. …
python ×10
pandas ×9
dataframe ×2
matplotlib ×2
numpy ×2
python-2.7 ×2
docker ×1
performance ×1
plot ×1
sampling ×1
statsmodels ×1
tensorflow ×1
timedelta ×1