Вы можете sum
целое DataFrame
и делить на state
total:
# Copying setup from Paul H answer
import numpy as np
import pandas as pd
np.random.seed(0)
df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3,
'office_id': list(range(1, 7)) * 2,
'sales': [np.random.randint(100000, 999999) for _ in range(12)]})
# Add a column with the sales divided by state total sales.
df['sales_ratio'] = (df / df.groupby(['state']).transform(sum))['sales']
df
Возвращает
office_id sales state sales_ratio
0 1 405711 CA 0.193319
1 2 535829 WA 0.347072
2 3 217952 CO 0.198743
3 4 252315 AZ 0.192500
4 5 982371 CA 0.468094
5 6 459783 WA 0.297815
6 1 404137 CO 0.368519
7 2 222579 AZ 0.169814
8 3 710581 CA 0.338587
9 4 548242 WA 0.355113
10 5 474564 CO 0.432739
11 6 835831 AZ 0.637686
Но обратите внимание, что это работает только потому, что все столбцы, отличные от state
, являются числовыми, что позволяет суммировать весь DataFrame. Например, если office_id
является символом вместо этого, вы получаете сообщение об ошибке:
df.office_id = df.office_id.astype(str)
df['sales_ratio'] = (df / df.groupby(['state']).transform(sum))['sales']
TypeError: неподдерживаемый тип операндов для /: 'str' и 'str'
blockquote>
Просто, чтобы дать обновление для Mongoose 3.x:
MyModel.find().distinct('_id', function(error, ids) {
// ids is an array of all ObjectIds
});
Я прочитал исходный код, а родной драйвер node-mongodb - это класс полномочий. Итак, объект соединения. Итак, после того, как вы сделали mongoose.connect (mongodb: //), вы можете сделать это.
if(mongoose.connections.length > 0) {
var nativeconn = mongoose.connections[0].conn;
nativeconn.person.distinct('born_in_city', function(error, results){
});
}
mongoose.connections[0].conn
для меня не определено, однако я уверен, что mongoose.connection
возвращает то же самое для активного соединения. Хотя я не могу использовать mongoose.connection.person
, как вы сказали, вместо этого я позвонил mongoose.connection.db.collections( .. )
, но как только я побежал collection.distinct( .. )
, результаты были пустыми. Я обновил свой вопрос, чтобы отразить мои попытки.
– Kit Sunde
19 May 2011 в 03:43
В моей программе этот код работает.
Person.collection.distinct("born_in_city", function(error, results){
console.log(results);
});
by node.js v0.4.7, mongoose 1.3.3
MyModel.distinct('_id', { foo: 'bar' }, function(error, ids)...
– JohnnyHK 13 September 2012 в 18:17MyModel.find({ sort: { '_id': -1 }}).distinct('_id', function(error, ids){/* handle result */});
– Risadinha 19 July 2013 в 16:56