小编All*_*enQ的帖子

PANDAS中类似SQL的窗口函数:Python Pandas Dataframe中的行编号

我来自sql背景,我经常使用以下数据处理步骤:

  1. 通过一个或多个字段对数据表进行分区
  2. 对于每个分区,在每个行中添加一个rownumber,将行按一个或多个其他字段排序,分析人员指定升序或降序

EX:

df = pd.DataFrame({'key1' : ['a','a','a','b','a'],
           'data1' : [1,2,2,3,3],
           'data2' : [1,10,2,3,30]})
df
     data1        data2     key1    
0    1            1         a           
1    2            10        a        
2    2            2         a       
3    3            3         b       
4    3            30        a        
Run Code Online (Sandbox Code Playgroud)

我正在寻找如何做PANDAS相当于这个SQL窗口函数:

RN = ROW_NUMBER() OVER (PARTITION BY Key1 ORDER BY Data1 ASC, Data2 DESC)


    data1        data2     key1    RN
0    1            1         a       1    
1    2            10        a       2 
2    2            2         a       3
3    3            3         b       1
4    3            30 …
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

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

使用Groupby的Python Pandas条件求和

使用样本数据:

df = pd.DataFrame({'key1' : ['a','a','b','b','a'],
               'key2' : ['one', 'two', 'one', 'two', 'one'],
               'data1' : np.random.randn(5),
               'data2' : np. random.randn(5)})
Run Code Online (Sandbox Code Playgroud)

DF

    data1        data2     key1  key2
0    0.361601    0.375297    a   one
1    0.069889    0.809772    a   two
2    1.468194    0.272929    b   one
3   -1.138458    0.865060    b   two
4   -0.268210    1.250340    a   one
Run Code Online (Sandbox Code Playgroud)

我试图找出如何按key1对数据进行分组,并仅将key2等于'one'的data1值相加.

这是我尝试过的

def f(d,a,b):
    d.ix[d[a] == b, 'data1'].sum()

df.groupby(['key1']).apply(f, a = 'key2', b = 'one').reset_index()
Run Code Online (Sandbox Code Playgroud)

但这给了我一个"无"值的数据框

index   key1    0
0       a       None
1       b       None
Run Code Online (Sandbox Code Playgroud)

这里有什么想法?我正在寻找与以下SQL相当的Pandas:

SELECT Key1, SUM(CASE WHEN …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

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

Python Pandas qcut的行为与观察结果不能被#箱整除

假设我有一个大熊猫系列的美元价值,并希望将其分为9组qcut.观察数#不能被9整除.SQL Server的ntile函数对于这种情况有一个标准方法:它使9个组中的前n个1观察大于剩余的(9- n)组.

我在熊猫中注意到,哪些群体的x观察与x + 1观察的分配似乎是随机的.我试图破译algos中的代码来弄清楚分位数函数如何处理这个问题,但无法弄明白.

我有三个相关的问题:

  1. 任何熊猫开发者都可以解释其qcut行为?是随机哪个群体获得更多的观察?
  2. 有没有办法强迫qcut行为类似NTILE(即,第一组获得x + 1观察)?
  3. 如果#2的答案是否定的,那么关于函数的任何想法都会表现得像NTILE?(如果这是一项复杂的工作,只需对您的方法进行概述就会有所帮助.)

以下是SQL Server NTILE输出的示例.

Bin |# Observations
1   26
2   26
3   26
4   26
5   26
6   26
7   26
8   25
9   25
Run Code Online (Sandbox Code Playgroud)

这是熊猫:

Bin |# Observations
1   26
2   26
3   26
4   25 (Why is this 25 vs others?)
5   26
6   26
7   25 …
Run Code Online (Sandbox Code Playgroud)

python pandas ranking-functions

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

Python Bokeh:根据columndatasource中的列设置线条颜色

我正在尝试生成一个包含多行的图表,但我使用的数据通常是长形式,如下所示:

x = [0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0]
y0 = [i**2 for i in x]
y1 = [10**i for i in x]
y2 = [10**(i**2) for i in x]
df = pandas.DataFrame(data=[x,y0,y1,y2]).T
df.columns = ['x','y0','y1','y2']

df2 = pd.concat([df.iloc[0:,1],df.iloc[0:,2],df.iloc[0:,3]], axis=0, keys = ['a','b','c']).reset_index()
df2.columns = ['grp','x','y']

df2

+----+-----+---+----------+
|    | grp | x |    y     |
+----+-----+---+----------+
|  0 | a   | 0 | 0.01     |
|  1 | a   | 1 | 0.25     |
|  2 | a …
Run Code Online (Sandbox Code Playgroud)

python pandas bokeh

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

Python Pandas:使用Aggregate与Apply来定义新列

假设我有一个像这样的数据帧:

n = 20
dim1 = np.random.randint(1, 3, size=n)
dim2 = np.random.randint(3, 5, size=n)
data1 = np.random.randint(10, 20, size=n)
data2 = np.random.randint(1, 10, size=n)
df = pd.DataFrame({'a': dim1, 'b': dim2 ,'val1': data1, 'val2': data2})
Run Code Online (Sandbox Code Playgroud)

如果我定义一个返回分组的函数:

def h(x):
    if x['val2'].sum() == 0:
        return 0
    else:
        return (x['val1'].sum())*1.0/x['val2'].sum()*1.0
Run Code Online (Sandbox Code Playgroud)

按列之一进行分组并聚合返回结果:

df.groupby(['a']).aggregate(h)['val1']
Run Code Online (Sandbox Code Playgroud)

虽然它将所有现有列转换为所需结果,而不是添加新列

使用聚合时,按两列分组会导致错误:

df.groupby(['a','b']).aggregate(h)['val1']

KeyError: 'val2'
Run Code Online (Sandbox Code Playgroud)

但转换聚合申请似乎有效.

我有两个问题:

  1. 为什么应用工作而不是聚合?
  2. 如果在通过某组键对数据帧进行分组后,我想使用将组值聚合为新列的函数,那么最好的方法是什么?

提前致谢.

python pandas

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

喂养Spacy NER模型负面例子以改进培训

我已经为spacy的ner模型提供了一套GoldParse对象来训练.

我现在要做的是评估新句子的结果,并将每个公认的实体标记为"好"或"坏",然后将这些信息纳入一批新的培训中.

这可能吗?ner模型如何从阴性样本中学习?

python spacy

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