小编Via*_*dov的帖子

GroupBy pandas DataFrame并选择最常见的值

我有一个包含三个字符串列的数据框.我知道第3列中唯一的一个值对前两个的每个组合都有效.要清理数据,我必须按数据框前两列进行分组,并为每个组合选择第三列的最常见值.

我的代码:

import pandas as pd
from scipy import stats

source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
                  'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
                  'Short name' : ['NY','New','Spb','NY']})

print source.groupby(['Country','City']).agg(lambda x: stats.mode(x['Short name'])[0])
Run Code Online (Sandbox Code Playgroud)

最后一行代码不起作用,它说"键错误'短名称'",如果我尝试仅按城市分组,那么我得到一个AssertionError.我该怎么办呢?

python group-by mode pandas pandas-groupby

66
推荐指数
8
解决办法
6万
查看次数

将DictVectorizer与sklearn DecisionTreeClassifier一起使用

我尝试用python和sklearn开始一个决策树.工作方法是这样的:

import pandas as pd
from sklearn import tree

for col in set(train.columns):
    if train[col].dtype == np.dtype('object'):
        s = np.unique(train[col].values)
        mapping = pd.Series([x[0] for x in enumerate(s)], index = s)
        train_fea = train_fea.join(train[col].map(mapping))
    else:
        train_fea = train_fea.join(train[col])

dt = tree.DecisionTreeClassifier(min_samples_split=3,
                             compute_importances=True,max_depth=5)
dt.fit(train_fea, labels)
Run Code Online (Sandbox Code Playgroud)

现在我尝试使用DictVectorizer做同样的事情,但我的代码不起作用:

from sklearn.feature_extraction import DictVectorizer

vec = DictVectorizer(sparse=False)
train_fea = vec.fit_transform([dict(enumerate(sample)) for sample in train])

dt = tree.DecisionTreeClassifier(min_samples_split=3,
                             compute_importances=True,max_depth=5)
dt.fit(train_fea, labels)
Run Code Online (Sandbox Code Playgroud)

我在最后一行有一个错误:"ValueError:标签数量= 332448与样本数量= 55"不匹配.正如我从文档中学到的,DictVectorize旨在将名义特征转换为数字特征.我做错了什么?

纠正了(感谢ogrisel推动我做一个完整的例子):

import pandas as pd
import numpy as np
from sklearn import tree …
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn

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

以相同的方式对两个pandas数据帧进行采样

我正在进行具有两个数据帧的机器学习计算 - 一个用于因子,另一个用于目标值.我必须将它们分成训练和测试部分.在我看来,我找到了方法,但我正在寻找更优雅的解决方案.这是我的代码:

import pandas as pd
import numpy as np
import random

df_source = pd.DataFrame(np.random.randn(5,2),index = range(0,10,2), columns=list('AB'))
df_target = pd.DataFrame(np.random.randn(5,2),index = range(0,10,2), columns=list('CD'))

rows = np.asarray(random.sample(range(0, len(df_source)), 2))

df_source_train = df_source.iloc[rows]
df_source_test = df_source[~df_source.index.isin(df_source_train.index)]
df_target_train = df_target.iloc[rows]
df_target_test = df_target[~df_target.index.isin(df_target_train.index)]

print('rows')
print(rows)
print('source')
print(df_source)
print('source train')
print(df_source_train)
print('source_test')
print(df_source_test)
Run Code Online (Sandbox Code Playgroud)

----编辑 - unutbu解决方案(midified)---

np.random.seed(2013)
percentile = .6
rows = np.random.binomial(1, percentile, size=len(df_source)).astype(bool)

df_source_train = df_source[rows]
df_source_test = df_source[~rows]
df_target_train = df_target[rows]
df_target_test = df_target[~rows]
Run Code Online (Sandbox Code Playgroud)

python pandas

8
推荐指数
2
解决办法
3448
查看次数

SQL Server:如何从base64字符串中删除前导'A'

我正在研究SQL Server并尝试创建一个组合来自bigintstring列的数据的单个键.为了最小化bigint's表示为字符串的大小我正在使用Base 64编码.问题是结果包括引导'A'意味着base64零并且它增加了结果字段的大小.A使用T-SQL或删除这些领先的方法是什么XQuery

示例代码:

DECLARE @binInput VARBINARY(MAX)
SET @binInput = CAST(123 AS VARBINARY(MAX))

SELECT CAST(N'' AS XML).value('xs:base64Binary(sql:variable("@binInput"))', 'varchar(max)')
Run Code Online (Sandbox Code Playgroud)

我有一个结果AAAAew==,我宁愿看到只是ew因为这个想法是尽可能地使最后的字符串尽可能短,而base64字符串应该比base10短.

更新1:正如Richard Boyce所建议的那样我试图将bigint转换为相等的字符串,但由于base64转换它给出了null

declare @input bigint
declare @varInput nvarchar(max)
set @input = 123
set @varInput = cast(cast(@input as varbinary(max)) as varchar(max))
select CAST(N'' AS xml).value('xs:base64Binary(sql:variable("@varInput"))', 'varchar(max)')
Run Code Online (Sandbox Code Playgroud)

更新2:当前的解决方案是获取base64binary字符串并删除前导'A和尾随'='.它并不完美,所以欢迎任何建议.实际代码:

declare @input bigint
set @input = 1234567890
declare @output varchar(max)
set @output = (select cast(@input …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server base64 xquery

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