我有下pandas表
TUFNWGTP TELFS t070101 t070102 t070103 t070104 \
TUDIARYDATE status
2003-01-03 emp 8155462.672158 2 0 0 0 0
2003-01-04 emp 1735322.527819 1 0 0 0 0
emp 3830527.482672 2 60 0 0 0
2003-01-02 unemp 6622022.995205 4 0 0 0 0
2003-01-09 emp 3068387.344956 1 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
我希望将每日数据汇总到每个子组的月度数据.
也就是说,如果没有子status索引,我会这样做
df.resample('M', how='sum')
Run Code Online (Sandbox Code Playgroud)
如何为每个子组执行每月聚合?
这是我的数据框中的两行:
>>> test.loc[test.index.year == 2009]
0 1 2 3 4 \
date
2009-01-01 252.855283 353.6261 556.295659 439.558188 432.936844
5 6 employment
date
2009-01-01 439.437132 433.269903 64.116667
>>> test.loc[test.index.year == 2007]
0 1 2 3 4 \
date
2007-01-01 269.277757 380.608002 401.765546 491.893821 433.864499
5 6 employment
date
2007-01-01 492.396073 489.260588 69.1375
Run Code Online (Sandbox Code Playgroud)
当我尝试时divide,我得到了
>>> test.loc[test.index.year == 2009].divide(test.loc[test.index.year == 2007])
0 1 2 3 4 5 6 employment
date
2007-01-01 NaN NaN NaN NaN NaN NaN NaN NaN
2009-01-01 NaN …Run Code Online (Sandbox Code Playgroud) 以下是我绘制热图的方法:
import matplotlib.pyplt as plt
ax = plt.gca()
im = ax.imshow(values)
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size='5%', pad=0.05)
plt.colorbar(im, cax=cax)
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个2x2子图,有4个不同的热图,并且都具有相同的热棒.我对如何实现这一目标完全不了解,并希望能够朝着正确的方向努力.
我在matplotlib中有一个热图,我想删除图中北部和东部的空白,如下图所示.

这是我用来生成图的代码:
# plotting
figsize=(50,20)
y,x = 1,2
fig, axarry = plt.subplots(y,x, figsize=figsize)
p = axarry[1].pcolormesh(copy_matrix.values)
# put the major ticks at the middle of each cell
axarry[1].set_xticks(np.arange(copy_matrix.shape[1])+0.5, minor=False)
axarry[1].set_yticks(np.arange(copy_matrix.shape[0])+0.5, minor=False)
axarry[1].set_title(file_name, fontweight='bold')
axarry[1].set_xticklabels(copy_matrix.columns, rotation=90)
axarry[1].set_yticklabels(copy_matrix.index)
fig.colorbar(p, ax=axarry[1])
Phylo.draw(tree, axes=axarry[0])
Run Code Online (Sandbox Code Playgroud) 我有一些类似的数据
foo <- data.table(uid=c("a","b", "c"), var1=c(T, F, F), var2=c(F, T, F))
我想(var1, var2)融入var3使用以下聚合的函数:
w IF var1 == T & var2 == T (其他:)x IF var1 == Ty IF var2 == Tz IF var1 == F & var2 == F也就是说,鉴于我foo,预期的结果是
uid var3
a x
b y
c z
Run Code Online (Sandbox Code Playgroud)
此外,任何额外的列foo都(var1, var2)应该被接纳到新的列中data.table
我试图按时间对数据帧进行分组,然后绘制每个子组的变量密度。我正在做:
myDf.groupby(pd.TimeGrouper('AS'))['myVar'].plot(kind='density')
Run Code Online (Sandbox Code Playgroud)
结果如下:
date
2006-01-01 Axes(0.125,0.1;0.775x0.8)
2007-01-01 Axes(0.125,0.1;0.775x0.8)
2008-01-01 Axes(0.125,0.1;0.775x0.8)
2009-01-01 Axes(0.125,0.1;0.775x0.8)
2010-01-01 Axes(0.125,0.1;0.775x0.8)
Name: myVar, dtype: object
Run Code Online (Sandbox Code Playgroud)
和情节:

如何将正确的图例添加到图中?现在无法知道哪一行对应哪一年。
假设我有 MultiIndex 系列
date foo
2006-01-01 1 12931926.310
3 11084049.460
5 10812205.359
7 9031510.239
9 5324054.903
2007-01-01 1 11086082.624
3 12028419.560
5 11957253.031
7 10643307.061
9 6034854.915
Run Code Online (Sandbox Code Playgroud)
如果它不是 MultiIndex,我可以选择那些带有 year2007到df.loc['2007']. 我在这里怎么做?我的自然猜测是df.loc['2007', :],但这给了我一个空洞Series([], name: FINLWT21, dtype: float64)。
最终,我也有兴趣替换不同日期的所有行而不是2007年份的行2007。
也就是说,我的预期输出是
date foo
2006-01-01 1 11086082.624
3 12028419.560
5 11957253.031
7 10643307.061
9 6034854.915
2007-01-01 1 11086082.624
3 12028419.560
5 11957253.031
7 10643307.061
9 6034854.915
Run Code Online (Sandbox Code Playgroud)
我试图实施@unutbu 的解决方案,但是
mySeries.loc[dateIndex.year != 2007] …Run Code Online (Sandbox Code Playgroud) 我想计算一下wolfram alpha所谓的不完整伽马函数(见这里):
`gamma[0, 0.1]`
Run Code Online (Sandbox Code Playgroud)
wolfram alpha输出是1.822.唯一scipy让我类似于此的东西scipy.special.gammainc,但它的定义与wolfram alpha定义其不完整伽玛函数的定义不同.
不出所料
import scipy
scipy.special.gammainc(0, 0.1)
Run Code Online (Sandbox Code Playgroud)
给了我nan.是否scipy支持我在寻找什么呢?
我的代码呢
from pathos.multiprocessing import ProcessingPool
def myFunc(something):
thispool = ProcessingPool(nodes=Result.cores)
listOfResults = thispool.map(something)
return listOfResults
for i in range(1000):
myFunc(i)
Run Code Online (Sandbox Code Playgroud)
现在,在我实际涉及的更多代码中,内存使用量不断增长.代码应该不采取任何措施,但如果我使用12个内核运行它,这12个内核最初将占用近1mb内存,但在几个小时的运行时间内,每个内核需要几GB.
所以,我认为池会泄漏内存,我最好在每次迭代后关闭它:
def myFunc(something):
thispool = ProcessingPool(nodes=Result.cores)
listOfResults = thispool.map(something)
thispool.close()
thispool.join()
return listOfResults
Run Code Online (Sandbox Code Playgroud)
但是,现在,经过几次迭代,我得到了
ValueError: Pool not running
Run Code Online (Sandbox Code Playgroud)
在this pool.map()行.如果我创建一个新的
test = ProcessingPool(nodes=4)
Run Code Online (Sandbox Code Playgroud)
并尝试运行test.map(),我得到同样的错误.这很奇怪,我初始化了一个新的变量......确实pathos.processing.ProcessingPool有一个独特的进程池的功能,如果我关闭一个,我关闭所有?
pathos.multiprocessing.ProcessingPool在没有内存泄漏的情况下实现内部循环的正确方法是什么?
当我改用时multiprocessing.Pool,不会出现问题.
我想绘制一条以空圆圈结尾的线。本质上是开放区间的可视化[0, 1)我的尝试是:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 1, 20)
y = 1 + x*2
l, = plt.plot(x[:-1], y[:-1])
plt.scatter(x[-1], y[-1], marker='o', facecolor='none', edgecolor=l.get_color())
Run Code Online (Sandbox Code Playgroud)
不幸的是,这条线没有连接到圆圈。或者,我可以绘制所有plt.plot(x, y),但该线在圆圈内。什么是绘制它的好方法,使线恰好接触圆并且不会走得更远?
我正在寻找一种方法,允许我为其他行重现此方法,并且不需要对每个用例进行大量微调。
python ×9
matplotlib ×4
pandas ×4
data.table ×1
heatmap ×1
numpy ×1
pathos ×1
r ×1
resampling ×1
scipy ×1