小编iwb*_*abn的帖子

pandas离开了join并更新了现有的列

我是pandas的新手,似乎无法使用merge函数:

>>> left       >>> right
   a  b   c       a  c   d 
0  1  4   9    0  1  7  13
1  2  5  10    1  2  8  14
2  3  6  11    2  3  9  15
3  4  7  12    
Run Code Online (Sandbox Code Playgroud)

在a列的左连接中,我想通过JOINED KEYS更新常用列.注意列c中的最后一个值来自LEFT表,因为没有匹配项.

>>> final       
   a  b   c   d 
0  1  4   7   13
1  2  5   8   14
2  3  6   9   15
3  4  7   12  NAN 
Run Code Online (Sandbox Code Playgroud)

我应该如何使用Pandas合并功能?谢谢.

python pandas

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

熊猫groupby和过滤器

我有数据帧:

df = pd.DataFrame({'ID':[1,1,2,2,3,3], 
                   'YEAR' : [2011,2012,2012,2013,2013,2014], 
                   'V': [0,1,1,0,1,0],
                   'C':[00,11,22,33,44,55]})
Run Code Online (Sandbox Code Playgroud)

我想按ID分组,并在每个组中选择V = 0的行.

这似乎不起作用:

print(df.groupby(['ID']).filter(lambda x: x['V'] == 0)) 
Run Code Online (Sandbox Code Playgroud)

出了错误:

TypeError:filter函数返回一个Series,但是期望一个标量bool

如何使用过滤器来实现目标?谢谢.

编辑:V上的条件可能因组而异,例如,对于ID 1,V == 0,对于ID 2,V == 1,此信息可通过另一个DF获得:

df = pd.DataFrame({'ID':[1,2,3], 
                   'V': [0,1,0])
Run Code Online (Sandbox Code Playgroud)

那么如何在每个组内进行行过滤?

python indexing group-by conditional-statements pandas

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

Python中多元正态分布的极大似然估计

我试图使用MLE拟合多元正态分布的参数.

import numpy as np
from scipy.stats import norm
from scipy.optimize import minimize
from scipy.stats import multivariate_normal as mnorm

def estimation(obs,fun,init,method='Nelder-Mead'):
    mle = lambda param: -np.sum(fun(*[obs,param])) ## negate since we will minimize
    result = minimize(mle,init,method=method)
    return result.x
Run Code Online (Sandbox Code Playgroud)

拟合单变量正态分布是好的:

obs = np.random.normal(1,4,50000)
ini = [0,1]
print(estimation(obs,lambda ob,p:norm.logpdf(ob,p[0],p[1]),ini))
Run Code Online (Sandbox Code Playgroud)

但是遇到了多变量的一些问题(错误将数组赋值给变量):

obs_m = np.random.multivariate_normal([0,0],[[1,0],[0,100]],50000)
ini_m = [[0,0],[[1,0],[0,100]]]
print(estimation(obs_m,lambda ob,p:mnorm.logpdf(ob,p[0],p[1],ini_m))
Run Code Online (Sandbox Code Playgroud)

似乎优化算法不适用于任意数组/矩阵.我必须将平均数组和协方差矩阵打包成一个平面阵列,以便最小化.

ini_m = [0,0,1,0,0,100]
print(estimation(obs_m,lambda ob,p:mnorm.logpdf(ob,[p[0],p[1]],[[p[2],p[3]],[p[4],p[5]]]),ini_m))
Run Code Online (Sandbox Code Playgroud)

显然,当尺寸增加时,这将很快失控,或者在没有封闭形式解决方案的情况下,这将更加复杂.这里最好做什么?谢谢.

python scipy mle

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

Pandas groupby在重组组时更改返回类型

我有一个数据帧:

df = pd.DataFrame({'c':[0,1,1,2,2,2],   'date':pd.to_datetime(['2016-01-01','2016-02-01','2016-03-01','2016-04-01','2016-05-01','2016-06-01'])})
Run Code Online (Sandbox Code Playgroud)

对于每一行,我想得到一个数字=每个日期的月份数(Jan = 1,Feb = 2等)+该组的长度(第一组有1个成员,第2组有2个等):

所以它应该返回类似的东西:

c       date   num
0 2016-01-01    2
1 2016-02-01    4
1 2016-03-01    5
2 2016-04-01    7
2 2016-05-01    8
2 2016-06-01    9
Run Code Online (Sandbox Code Playgroud)

我创建了一个函数:

def testlambda(x):
    print(x)
    return x.dt.month.astype('int') + len(x)
Run Code Online (Sandbox Code Playgroud)

并使用groupby + transform:

df['num'] = df.groupby(['c'])['date'].transform(lambda x: testlambda(x))
Run Code Online (Sandbox Code Playgroud)

但是返回的新列仍然是日期格式,即使我的lambda返回int.

该怎么办?

python group-by pandas

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

pandas groupby 返回额外索引

dft = pd.DataFrame({'C1': ['A','A','B','B'], 
                    'C2': [1,2,3,4]}) 

def lam3(df):
    return pd.DataFrame({'X': ['C','D','E'], 
                    'Y': [11,22,33]})
Run Code Online (Sandbox Code Playgroud)

给定上述数据帧和函数(我无法更改),我想运行 groupby+apply 以便每个组返回一个数据帧,如下所示

    C1  C2  X   Y
0   A   1   C   11
1   A   1   D   22
2   A   1   E   33
3   A   2   C   11
4   A   2   D   22
5   A   2   E   33
6   B   3   C   11
7   B   3   D   22
8   B   3   E   33
9   B   4   C   11
10  B   4   D   22
11  B   4   E   33 …
Run Code Online (Sandbox Code Playgroud)

python group-by pandas

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

熊猫上个月开始

给定一个数据帧:

df = pd.DataFrame({'c':[0,1,1,2,2,2],'date':pd.to_datetime(['2016-01-01','2016-02-01','2016-03-01','2016-04-01','2016-05-01','2016-06-05'])})
Run Code Online (Sandbox Code Playgroud)

如何从上个月开始每个日期?以下不适用于6/5,并且有一些额外的时间部分.

pd.to_datetime(df['date'], format="%Y%m") + pd.Timedelta(-1,unit='M') + MonthBegin(0)
Run Code Online (Sandbox Code Playgroud)

编辑

我有一个解决方法(后退2步,前进1步):

(df['date']+ pd.Timedelta(-2,unit='M')+ MonthBegin(1)).dt.date
Run Code Online (Sandbox Code Playgroud)

不喜欢这个.应该有更好的东西.

datetime pandas

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

xgboost CV 和树的数量

我正在阅读这篇文章但不完全了解 xgboost 中有关函数 CV 和参数“树数”的详细信息。

假设我们从特征和目标值的数据帧开始。CV在每一轮做什么?如果 CV 结果有 500 行(即有 500 棵决策树),每棵树是如何构造的?500 棵树如何组合以产生单个对数损失数?

如果我们可以从 CV 函数中得到一个单一的预测,为什么我们需要 XGBClassifier.fit 来生成一个模型(因此是一个损失数)?

谢谢你。

python machine-learning xgboost

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

python:将1/0的列表转换为布尔列表

试图将1/0的列表转换为布尔列表.

bool([1,0,1,0])似乎不起作用. [1,0,1,0] == 1不起作用.

还有另一种方式(希望非列表理解)吗?

python

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