小编gam*_*int的帖子

如何分析此Pandas DataFrame中的所有重复条目?

我希望能够在Pandas DataFrame中计算数据的描述性统计数据,但我只关心重复的条目.例如,假设我创建了DataFrame:

import pandas as pd
data={'key1':[1,2,3,1,2,3,2,2],'key2':[2,2,1,2,2,4,2,2],'data':[5,6,2,6,1,6,2,8]}
frame=pd.DataFrame(data,columns=['key1','key2','data'])
print frame


     key1  key2  data
0     1     2     5
1     2     2     6
2     3     1     2
3     1     2     6
4     2     2     1
5     3     4     6
6     2     2     2
7     2     2     8
Run Code Online (Sandbox Code Playgroud)

如您所见,行0,1,3,4,6和7都是重复的(使用'key1'和'key2'.但是,如果我将这个DataFrame索引如下:

frame[frame.duplicated(['key1','key2'])]
Run Code Online (Sandbox Code Playgroud)

我明白了

   key1  key2  data
3     1     2     6
4     2     2     1
6     2     2     2
7     2     2     8
Run Code Online (Sandbox Code Playgroud)

(即,第一行和第二行不会显示,因为它们没有通过重复方法索引为True).

这是我的第一个问题.我的第二个问题涉及如何从这些信息中提取描述性统计数据.暂时忘记丢失的副本,假设我想为重复的条目计算.min()和.max()(这样我就可以得到一个范围).我可以在groupby对象上使用groupby和这些方法,如下所示:

a.groupby(['key1','key2']).min()
Run Code Online (Sandbox Code Playgroud)

这使

           key1  key2  data
key1 key2                  
1    2        1     2 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

将 pandas 数据帧的一行转换为数据帧本身(而不是一系列)?

我有一个正在迭代的 df,就像这样

for _, row in df.iterrows():
       process(row)
Run Code Online (Sandbox Code Playgroud)

函数process接受参数并对其执行 iterrows() 操作。它这样做是因为它通常传递一个数据帧。但是,我想传递一行进行处理并仍然使其正常运行。问题是是一个系列,而不是一个数据框。并且 Series 不能使用 .iterrows() 方法进行迭代。我尝试将行转换为数据框,如下所示

row = row.to_frame()

但这似乎并没有保留索引、列等。

有没有办法轻松做到这一点?或者我应该重写流程函数以便能够处理单个系列/行?

python pandas

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

当对jac = False时未使用的Jacobian进行近似时,“ Newton-CG方法需要使用Jacobian”?

我正在使用scipy.optimize.minimize进行优化,并尝试使用以下方法:'Newton-CG','dogleg'和'trust-ncg'。据我了解,对于这些方法,需要目标函数的雅可比。但是,该文档建议,如果将jac设置为False,则将对数值进行梯度计算。

所以我试图像这样调用函数:

scipy.optimize.minimize(fun,x0,method='Newton-CG',jac=False,options={'disp':True}
Run Code Online (Sandbox Code Playgroud)

当我打电话给我时,我收到以下错误消息:

  File "/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 1351, in _minimize_newtoncg
raise ValueError('Jacobian is required for Newton-CG method')
Run Code Online (Sandbox Code Playgroud)

这是令人惊讶的,因为我认为我只是将其设置为False(并且如果jac设置为None,则此异常仅在* / optimize.py中发生)。所以我进入/usr/lib/python2.7/dist-packages/scipy/optimize/optimize.py并查看功能

def _minimize_newtoncg(fun, x0, args=(), jac=None, hess=None, hessp=None,
                   callback=None, xtol=1e-5, eps=_epsilon, maxiter=None,
                   disp=False, return_all=False,
                   **unknown_options):
Run Code Online (Sandbox Code Playgroud)

在此函数的开头,我编写了以下打印语句:

print (jac)
_check_unknown_options(unknown_options)
print(jac)
if jac is None:
    raise ValueError('Jacobian is required for Newton-CG method')
Run Code Online (Sandbox Code Playgroud)

出人意料的是,“无”被打印出来并且不是假的!因此,我看一下调用函数,该函数位于/usr/lib/python2.7/dist-packages/scipy/optimize/_minimize.py中,并且找到将其设置为None的代码片段:

    if not callable(jac):
    if bool(jac):
        fun = MemoizeJac(fun)
        jac = fun.derivative
    else:
        jac = None
Run Code Online (Sandbox Code Playgroud)

因此,为什么将jac设置为“无”是有道理的(尽管它与建议我在原始函数调用中将jac设置为False以获得jacobian数值近似的文档不兼容)。

我想念什么?我是否可以像在Scipy中为我计算雅可比方程的数值近似值那样调用“牛顿-CG”方法?

python scipy

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

确定模块文件位置

在Lua中加载模块后,我想确定它对应的模块文件。在 python 中,您可以使用如下代码来执行此操作:

import module_name
module_name.__file__
Run Code Online (Sandbox Code Playgroud)

所以在 Lua 中如果我做类似的事情

require 'math'
Run Code Online (Sandbox Code Playgroud)

接下来我该放什么来确定该模块的位置?顺便说一句,我实际上并不需要 math 的位置,而是下载了一些其他第三方包,并且想知道当我调用 Lua 时实际使用的构建文件的副本。

lua

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

在 matplotlib 中创建两个完全独立的图并在它们之间来回切换

我想在一个 python 脚本中创建两个独立的 matplotlib 图,并可能在我向各种图中添加线条、注释等时在它们之间来回跳转(例如,也许我调用了一个函数,该函数将线条添加到两个绘图,然后是另一个添加注释的函数)。

我希望通过处理 matplotlib 示例,我能够找出一些有效的解决方案,但我想知道这样做的首选和最干净的方法是什么。我往往对什么时候应该做这样的事情感到困惑

fig,ax=plt.subplots()
Run Code Online (Sandbox Code Playgroud)

什么时候我应该做这样的事情:

fig=plt.figure()
Run Code Online (Sandbox Code Playgroud)

此外,我应该如何在图之间来回切换。如果我做了类似的事情

fig1,ax1=plt.subplots()
fig2,ax2=plt.subplots()
Run Code Online (Sandbox Code Playgroud)

然后我可以通过执行以下操作来引用这些图:

ax1.plt.plot([some stuff])
ax2.plt.plot([otherstuff]
Run Code Online (Sandbox Code Playgroud)

? 我问这个是因为在 matplotlib 示例中,他们通常在调用 plt.subplot() 后不会引用这样的图,而是调用像这样的命令

plt.plot([stuff])
Run Code Online (Sandbox Code Playgroud)

据推测,他们没有指定 ax1 或 ax2 并不重要,因为示例中只有一个图。最后,我想使用类似的方法将两个图都保存到文件中

plt.savefig(....)
Run Code Online (Sandbox Code Playgroud)

尽管我再次需要能够独立参考两个图。那么实现这一点的正确方法是什么?

python matplotlib

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

使用python包的本地副本而不是site-packages中安装的副本

我在我的site-packages目录中安装了一个基于Python的包.但是,我正在尝试学习代码是如何工作的,所以我想通过输入大量的print语句来破解它,这样我就能理解代码在做什么.但是在一天结束时,我想要一个干净的安装,而不是我的所有黑客.

当然,我可以将原始文件复制到其他地方,制作一些黑客,然后在最后复制所有原始文件.但这真的很乏味.至少,我想安装Python包的本地副本,然后让python脚本优先使用此副本(可能通过脚本顶部的适当语句).但也许这甚至不是进行python开发/黑客攻击的最佳方式.

什么是我的问题的最佳解决方案?我希望能够破解包(并使用该包),但不会弄乱我的干净版本.

python

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

按字典键的整数对字典进行排序

假设我有一本这样的字典:

thedict={'1':'the','2':2,'3':'five','10':'orange'}
Run Code Online (Sandbox Code Playgroud)

我想按键对这本字典进行排序。如果我执行以下操作:

for key,value in sorted(thedict.iteritems()):
     print key,value
Run Code Online (Sandbox Code Playgroud)

我会得到

1 the
10 orange
2 2
3 five
Run Code Online (Sandbox Code Playgroud)

因为键是字符串而不是整数。我想对它们进行排序,就好像它们是整数一样,因此条目“10,orange”排在最后。我认为这样的事情会起作用:

for key,value in sorted(thedict.iteritems(),key=int(operator.itemgetter(0))):
    print key,value
Run Code Online (Sandbox Code Playgroud)

但这产生了这个错误:

TypeError: int() argument must be a string or a number, not 'operator.itemgetter'
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?谢谢!

python sorting dictionary

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

标签 统计

python ×6

pandas ×2

dataframe ×1

dictionary ×1

lua ×1

matplotlib ×1

scipy ×1

sorting ×1