我来自sql背景,我经常使用以下数据处理步骤:
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) 使用样本数据:
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) 假设我有一个大熊猫系列的美元价值,并希望将其分为9组qcut.观察数#不能被9整除.SQL Server的ntile函数对于这种情况有一个标准方法:它使9个组中的前n个1观察大于剩余的(9- n)组.
我在熊猫中注意到,哪些群体的x观察与x + 1观察的分配似乎是随机的.我试图破译algos中的代码来弄清楚分位数函数如何处理这个问题,但无法弄明白.
我有三个相关的问题:
qcut行为?是随机哪个群体获得更多的观察?qcut行为类似NTILE(即,第一组获得x + 1观察)?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) 我正在尝试生成一个包含多行的图表,但我使用的数据通常是长形式,如下所示:
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) 假设我有一个像这样的数据帧:
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)
但转换聚合申请似乎有效.
我有两个问题:
提前致谢.
我已经为spacy的ner模型提供了一套GoldParse对象来训练.
我现在要做的是评估新句子的结果,并将每个公认的实体标记为"好"或"坏",然后将这些信息纳入一批新的培训中.
这可能吗?ner模型如何从阴性样本中学习?