Группировка панд по столбцу 1 и добавление разделенных запятыми записей из столбца 2

Если вы используете MVC 4, обязательно проверьте этот ответ .


Если вы все еще получаете error:

  • после установки свойства maxJsonLength в максимальное значение в web.config
  • , и вы знаете, что длина ваших данных меньше этого значения
  • , и вы не используете метод веб-службы для сериализации JavaScript

, ваша проблема в том, что:

Значение свойства MaxJsonLength применяется только к внутреннему экземпляру JavaScriptSerializer, который используется асинхронным уровнем связи для вызова методов Web-сервисов. ( MSDN: ScriptingJsonSerializationSection.MaxJsonLength Свойство )

В принципе, «внутренний» JavaScriptSerializer учитывает значение maxJsonLength, когда вызывается из веб-метода; прямое использование JavaScriptSerializer (или использование с помощью MVC action-method / Controller) не учитывает свойство maxJsonLength, по крайней мере, не из раздела systemWebExtensions.scripting.webServices.jsonSerialization файла web.config.

As обходной путь, вы можете сделать следующее в своем контроллере (или в любом месте):

var serializer = new JavaScriptSerializer();

// For simplicity just use Int32's max value.
// You could always read the value from the config section mentioned above.
serializer.MaxJsonLength = Int32.MaxValue;

var resultData = new { Value = "foo", Text = "var" };
var result = new ContentResult{
    Content = serializer.Serialize(resultData),
    ContentType = "application/json"
};
return result;

Этот ответ - моя интерпретация этого ответа на форум asp.net .

1
задан sectechguy 16 January 2019 в 12:04
поделиться

3 ответа

Сначала разделить столбец запятой, затем groupby по столбцу и использовать генератор для сглаживания вложенных списков с помощью set и join:

df = (distinct_category['category'].str.split(', ')
                    .groupby(distinct_category['top_level_domain'])
                    .agg(lambda x: ', '.join(set(y for z in x for y in z)))
                    .reset_index())
print (df)

       top_level_domain                        category
0       doubleclick.net   Ads, Online Shopping, Web Ads
1  google-analytics.com               Internet Services
2            google.com  Content Server, Search Engines
3        inspectlet.com               Internet Services
4              live.com                   None Assigned
5       service-now.com     Business, Software/Hardware

Другим решением является присвоение обратно разделенных значений: [116 ]

df = (distinct_category.assign(category = distinct_category['category'].str.split(', '))
                       .groupby('top_level_domain')['category']
                       .agg(lambda x: ', '.join(set(y for z in x for y in z)))
                       .reset_index())
0
ответ дан jezrael 16 January 2019 в 12:04
поделиться

Сначала разверните ваш фрейм данных, чтобы каждая строка содержала только одну категорию:

split = df['category'].str.split(', ')
lens = split.str.len()

df = pd.DataFrame({'top_level_domain': np.repeat(df['top_level_domain'].values, lens),
                   'category': np.concatenate(split)})

Затем удалите дубликаты и используйте agg с str.join:

res = df.drop_duplicates()\
        .groupby('top_level_domain')['category'].agg(','.join)
0
ответ дан jpp 16 January 2019 в 12:04
поделиться

У меня работает следующий код:

df =df.groupby('top_level_domain')['category'].agg([('category', ', '.join)]).reset_index()
0
ответ дан Loochie 16 January 2019 в 12:04
поделиться
Другие вопросы по тегам:

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