Pandas Dataframe groupby берет метку, включенную в массив numpy

Я считаю, что это ограничение очень раздражает и противоречит общей тенденции не использовать SELECT * в запросах.

Тем не менее с анонимными типами c # существует обходное решение, путем извлечения объектов в анонимного типа, а затем скопируйте его в правильный тип.

Например:

var q = from emp in employees where emp.ID !=0
select new {Name = emp.First + " " + emp.Last, EmployeeId = emp.ID }
var r = q.ToList();
List<User> users = new List<User>(r.Select(new User
   {
        Name = r.Name,
        EmployeeId = r.EmployeeId 
   }));

И в случае, когда мы имеем дело с одним значением (как в ситуации, описанной в вопросе), это еще проще, и нам просто нужно чтобы скопировать непосредственно значения:

var q = from emp in employees where emp.ID !=0 
select new { Name = emp.First + " " + emp.Last, EmployeeId = emp.ID }
var r = q.FirstOrDefault();
User user = new User { Name = r.Name, EmployeeId = r.ID };

Если имя свойства соответствует столбцам базы данных, мы можем сделать это еще проще в запросе, выполнив select

var q = from emp in employees where emp.ID !=0 
select new { emp.First, emp.Last, emp.ID }

One может пойти вперед и написать выражение лямбда, которое может автоматически копироваться на основе имени свойства, без необходимости явно указывать значения.

3
задан SHALIN PATEL 30 March 2019 в 23:14
поделиться

1 ответ

Я считаю, что вам нужно преобразовать индекс в столбец по DataFrame.reset_index :

#simplify code 
df = df.groupby(df.start_date.str.extract("^(.*?)\:", expand=False))['start_date'].count()

numpy_array = df.rename_axis('index').reset_index().values
print (numpy_array)
[['2014-04-15 00' 2]
 ['2014-04-15 01' 2]
 ['2014-04-15 02' 1]
 ['2014-04-15 03' 1]]

Или для панд 0,24+ . Используйте:

numpy_array = df.rename_axis('index').reset_index().to_numpy()
0
ответ дан jezrael 30 March 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: