小编Cle*_*leb的帖子

根据值的位置从多个列创建字典

我有一个像这样的数据框

import pandas as pd

df = pd.DataFrame(
    {
        'C1': list('aabbab'),
        'C2': list('abbbaa'),
        'value': range(11, 17)
    }
)

  C1 C2  value
0  a  a     11
1  a  b     12
2  b  b     13
3  b  b     14
4  a  a     15
5  b  a     16
Run Code Online (Sandbox Code Playgroud)

我想生成这样的字典:

{'C1': {'a': {1: 11, 2: 12, 3: 15}, 'b': {1: 13, 2: 14, 3: 16}},
'C2': {'a': {1: 11, 2: 15, 3: 16}, 'b': {1: 12, 2: 13, 3: 14}}}
Run Code Online (Sandbox Code Playgroud)

逻辑如下:

df我转到该列 …

python performance dictionary pandas

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

用Python获取shell输出?

我有一个shell脚本,可以获取域的whois信息,输出takenavailableshell,具体取决于域.

我想执行脚本,并能够在我的Python脚本中读取这个值.

我一直在玩,subprocess.call但无法弄清楚如何获得输出.

例如,

subprocess.call('myscript www.google.com', shell=True)
Run Code Online (Sandbox Code Playgroud)

将输出taken到shell.

python linux shell

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

如何快速匹配字符串(短语)与HashMap值?

我有一个HashMap,其键是id,其值是文本:

HashMap<String,String> textMap = new HashMap<String,String>();
textMap.put("id_1","She");
textMap.put("id_2","has");
textMap.put("id_3","a"); 
textMap.put("id_4","neck");
textMap.put("id_5","pain");
//.. more elements in textMap
Run Code Online (Sandbox Code Playgroud)

我想找到一个短语的相关id,比如'颈部疼痛',所以在这种情况下,结果应该是id_4和id_5.

任何人都可以建议一个有效的算法来匹配短语与ids?

对不起,我忘了包含一个重要的条件.我有短语和单词的偏移量,比如"start_5_end_14",这意味着5应该是"颈部"的开始,因为"她"的开头为0.但是,使情况复杂化的是偏移可能不正确.

java algorithm data-structures

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

Python:如何同时向列表中添加两个列表?

假设我有一个清单

l1 = []
Run Code Online (Sandbox Code Playgroud)

另一个清单

l2 = ['a','b']
Run Code Online (Sandbox Code Playgroud)

和两个变量

u = 1
z = 2
Run Code Online (Sandbox Code Playgroud)

现在我想将l2和l1两个变量作为列表添加到l1中.可以使用append分两步完成:

l1.append(l2)
l1.append(list((u,z)))
Run Code Online (Sandbox Code Playgroud)

这给了我想要的输出

[['a', 'b'], [1, 0]]
Run Code Online (Sandbox Code Playgroud)

但有点像

l1.append(l2, list((u,z)))
Run Code Online (Sandbox Code Playgroud)

不起作用.有没有办法获得我在一个漂亮的oneliner中的两个步骤获得的相同输出,即可以同时通过两个列表附加列表?

python list append

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

python scipy.sparse.linalg.eigs 连续调用给出不同的结果

我正在尝试计算python 中稀疏矩阵的谱半径。这就是我所拥有的:

from scipy.sparse.linalg import eigs
from scipy import sparse

w = sparse.rand(10, 10, 0.1)
spec_radius = max(abs(eigs(w)[0]))
Run Code Online (Sandbox Code Playgroud)

其中 的值w被缩放到 的范围内[-1,1]。然而,运行该命令每次都会给出不同的结果:

>>> print max(abs(eigs(w)[0]))
4.51859016293e-05

>>> print max(abs(eigs(w)[0]))
4.02309443625e-06

>>> print max(abs(eigs(w)[0]))
3.7611221426e-05
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?我本以为每次都会一样。我是否误解了这些命令的工作原理?

python scipy eigenvalue sparse-matrix

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

如何根据 numpy argsort 函数的输出对列表进行排序

我有一个这样的列表:

 myList = [10,30,40,20,50]
Run Code Online (Sandbox Code Playgroud)

现在我使用numpy's argsort函数来获取排序列表的索引:

import numpy as np
so = np.argsort(myList)
Run Code Online (Sandbox Code Playgroud)

这给了我输出:

array([0, 3, 1, 2, 4])
Run Code Online (Sandbox Code Playgroud)

当我想使用它对数组进行排序时so效果很好:

myArray = np.array([1,2,3,4,5])
myArray[so]
array([1, 4, 2, 3, 5])
Run Code Online (Sandbox Code Playgroud)

但是当我将它应用到另一个列表时,它不起作用但会抛出错误

myList2 = [1,2,3,4,5]
myList2[so]
Run Code Online (Sandbox Code Playgroud)

类型错误:只有具有一个元素的整数数组才能转换为索引

现在,我如何在so不使用 for 循环且不先将此列表转换为数组的情况下对另一个列表进行排序?

python sorting numpy list

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

填充numpy数组的对角线失败

我正在尝试填充矩阵的偏移对角线:

loss_matrix = np.zeros((125,125))

np.diagonal(loss_matrix, 3).fill(4)

ValueError: assignment destination is read-only
Run Code Online (Sandbox Code Playgroud)

两个问题:

1)如果不迭代索引,如何设置numpy数组的偏移对角线?

2)为什么结果np.diagonal只读?numpy.diagonal的文档读取:"在NumPy 1.10中,它将返回读/写视图,写入返回的数组将改变原始数组."

np.__version__

'1.10.1'
Run Code Online (Sandbox Code Playgroud)

python arrays numpy diagonal

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

在python中反转列表列表中的元素

我有一个 numpy 数组,其中包含前 2 个标签:

n =  [['20011' '20048']
     ['20011' '20048']
     ['20011' '20048']
     ['20011' '20048']]
Run Code Online (Sandbox Code Playgroud)

我想以相反的顺序获取它们:

[['20048' '20011']
 ['20048' '20011']
 ['20048' '20011']]
Run Code Online (Sandbox Code Playgroud)

我怎样才能在保持格式不变的情况下做到这一点?

到目前为止的代码:

n = model1.classes_[order[:,-5:]]
print(n)
r = [p[::-1] for p in n]
print(r)
Run Code Online (Sandbox Code Playgroud)

输出:

[array(['20048', '20011'], 
      dtype='|S5'), array(['20048', '20011'], 
      dtype='|S5'), array(['20048', '20011'], 
      dtype='|S5'), array(['20048', '20011'], 
      dtype='|S5')]
Run Code Online (Sandbox Code Playgroud)

需要尝试删除dtypes并仅保留反转数组。

python numpy list

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

如何按一列分组并对另一列的值进行排序?

这是我的数据帧

import pandas as pd
df = pd.DataFrame({'A': ['one', 'one', 'two', 'two', 'one'] ,
                   'B': ['Ar', 'Br', 'Cr', 'Ar','Ar'] ,
                   'C': ['12/15/2011', '11/11/2001', '08/30/2015', '07/3/1999','03/03/2000' ],
                      'D':[1,7,3,4,5]})
Run Code Online (Sandbox Code Playgroud)

我的目标是按列A进行分组,并按列对分组结果进行排序B.

这是我想出的:

sort_group = df.sort_values('B').groupby('A')
Run Code Online (Sandbox Code Playgroud)

我希望分组操作不会扭曲顺序,但它不起作用,也不返回数据帧,而是返回groupby对象

<pandas.core.groupby.DataFrameGroupBy object at 0x0000000008B190B8>
Run Code Online (Sandbox Code Playgroud)

有什么建议?

python sorting group-by pandas

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

合并数据框、删除列和设置索引

我有两个这样的数据框:

import pandas as pd

left = pd.DataFrame({'id1': ['a', 'b', 'c'], 'val1': [1, 2, 3]})
right = pd.DataFrame({'ID2': ['a', 'c', 'd'], 'val2': [4, 5, 6]})

  id1  val1
0   a     1
1   b     2
2   c     3

  ID2  val2
0   a     4
1   c     5
2   d     6
Run Code Online (Sandbox Code Playgroud)

我想合并这两个数据帧,进行内部合并,删除ID2,然后也用作id1新索引。我想要的输出如下所示:

    val1  val2
id1            
a       1     4
c       3     5
Run Code Online (Sandbox Code Playgroud)

我目前按如下方式执行此操作:

res = pd.merge(left, right, left_on='id1', right_on='ID2', how='inner').drop('ID2', axis=1).set_index('id1')
Run Code Online (Sandbox Code Playgroud)

这给了我想要的输出。

我的问题是是否已经有一个选项可以让我

a)在执行内部合并时删除键列,因为这样就会有两个相同的列

和/或

b) 直接将索引设置为用于合并过程的关键列之一。

我现在这样做的方式是要走的路还是已经有更智能的/内置的东西了?

python merge pandas

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