Вы можете использовать pivot_table
с unstack
:
print df.pivot_table(index='Symbol',
columns='Year',
values='Action',
fill_value=0,
aggfunc='count').unstack()
Year Symbol
2001 AAPL 2
BAC 0
2002 AAPL 0
BAC 2
dtype: int64
Если вам нужен вывод как DataFrame
, используйте to_frame
:
print df.pivot_table(index='Symbol',
columns='Year',
values='Action',
fill_value=0,
aggfunc='count').unstack()
.to_frame()
.rename(columns={0:'Action'})
Action
Year Symbol
2001 AAPL 2
BAC 0
2002 AAPL 0
BAC 2
Верьте мне, я знаю точно, куда Вы происходите из.. Я в настоящее время перемещаю крупное приложение от классика ASP к.NET.. И я все еще изучаю ASP.NET! :S (да, я испуган!).
Главное, которое я сохранил в своем уме, является этим:
Очень как проигрывание Jenga с Вашим кодом :)
Всего наилучшего с проектом, больше вопросы, затем спросите :)
После того, как мне кодируют все, что я сделаю несколько передач при рефакторинге/тестировании. Я просто задаюсь вопросом, есть ли у кого-либо какие-либо подсказки относительно того, как сделать этот процесс немного легче/больше эффективный.
Обычно я не поклонник TDD, но в случае рефакторинга его действительно способ пойти.
Запишите некоторые тесты сначала, которые проверяют то, что на самом деле делает бит, на который Вы смотрите. Затем осуществите рефакторинг. Это НАМНОГО более надежно, чем просто, 'похоже, что это все еще работает'.
Другое огромное преимущество для этого - то, что при рефакторинге чего-то, что далее снижается на страницу, или в общей библиотеке или чем-то, можно просто повторно выполнить тесты, в противоположность обнаружению твердого способа, которым было на самом деле связано на вид несвязанное изменение
Вы идете от классического ASP до ASP с 3,5 без просто перезаписи? Skillz. Я должен был иметь дело с некоторым ASP прежней версии @work, и я думаю, что просто легче проанализировать его и переписать его.
ASP-страница с 1500 строками? С большим количеством из обращается, включают файлы? Не говорите мне - функции не имеют никакого соглашения о присвоении имен, которое говорит Вам, которые включают файл, имеет их реализацию... Это возвращает памяти (дрожь)...
Это звучит мне как Вы, имеют довольно серьезный подход - я не уверен, существует ли какой-либо волшебный способ смягчить Вашу боль. После Вашего усилия по преобразованию архитектура Вашего приложения все еще будет грязна и тяжела UI (т.е. код - позади рабочих рабочих процессов), и это, вероятно, все еще будет довольно болезненно для поддержания, но рефакторинг Вас делает, должен определенно помочь.
Я надеюсь, что Вы взвесили обновление, которое Вы делаете против просто перезаписи с нуля - пока Вы не намереваетесь расширить приложение слишком много, и Вы не, прежде всего, ответственны за поддержание приложения, обновление сложного основанного на рабочем процессе приложения как Вы делает, может быть более дешевым и лучший выбор, чем перезапись его с нуля. ASP.NET должен дать Вам лучшие возможности улучшить производительность и масштабируемость, по крайней мере, чем Классик ASP. От Вашего вопроса я предполагаю, что слишком поздно в процессе для того обсуждения так или иначе.
Удачи!
Кажется, что у Вас есть довольно хороший дескриптор на вещах. Я видел, что много людей пытается сделать прямолинейную транслитерацию, включает и все, и она просто не работает. У Вас должно быть хорошее понимание того, как ASP.NET хочет работать, потому что это очень отличается от Классика ASP, и это походит, возможно, что у Вас есть это.
Для больших файлов я попытался бы получить высокоуровневое представление сначала. Например, одна вещь, которую я заметил, состоит в том, что Классик ASP был ужасен о вызовах функции. Вы прочитали бы некоторый код и находить вызов к функции без подсказки как, туда, где это могло бы быть реализовано. В результате Классик код ASP был склонен иметь долгие функции и сценарии для предотвращения тех противных переходов. Я не забываю видеть функцию, которая распечатала к 40 страницам! Парсинг прямо через так большое количество кода не является никакой забавой.
ASP.NET помогает следовать за вызовами функции вокруг, таким образом, Вы могли бы запустить, вспыхнув Ваши большие блоки кода в несколько меньших функций.
Я однажды столкнулся с приложением .NET, которое было портировано от ASP. .aspx страницы были полностью пробелом. Для рендеринга UI разработчики использовали StringBuilders в коде позади и затем сделали response.write. Это было бы неправильным способом сделать это!
Не говорите мне - функции не имеют никакого соглашения о присвоении имен, которое говорит Вам, которые включают файл, имеет их реализацию... Это возвращает памяти (дрожь)...
Как Вы предполагали?;)
Я надеюсь, что Вы взвесили обновление, которое Вы делаете против просто перезаписи с нуля - пока Вы не намереваетесь расширить приложение слишком много, и Вы не, прежде всего, ответственны за поддержание приложения, обновление сложного основанного на рабочем процессе приложения как Вы делает, может быть более дешевым и лучший выбор, чем перезапись его с нуля. ASP.NET должен дать Вам лучшие возможности улучшить производительность и масштабируемость, по крайней мере, чем Классик ASP. От Вашего вопроса я предполагаю, что слишком поздно в процессе для того обсуждения так или иначе.
Это было чем-то, о чем мы говорили. На основе синхронизации (пытающийся разбить сайт конкурента для запуска) и ресурсы (в основном два разработчика) имело смысл не уничтожать сайт с орбиты. Дела на самом деле шли намного лучше, чем я ожидал. Мы знали даже от перспективного проектирования, что этот код собирался дать нам большинство проблем. Необходимо видеть историю пересмотра классических включенных ASP-страниц, это - кровопролитие.
Для больших файлов я попытался бы получить высокоуровневое представление сначала. Например, одна вещь, которую я заметил, состоит в том, что Классик ASP был ужасен о вызовах функции. Вы прочитали бы некоторый код и находить вызов к функции без подсказки как, туда, где это могло бы быть реализовано. В результате Классик код ASP был склонен иметь долгие функции и сценарии для предотвращения тех противных переходов. Я не забываю видеть функцию, которая распечатала к 40 страницам! Парсинг прямо через так большое количество кода не является никакой забавой.
У меня на самом деле было это неудовольствие работы с унаследованным кодом вполне немного, таким образом, у меня есть достойное понимание высокого уровня системы. Вы правы относительно функциональной длины, существуют некоторые стандартные программы (большинство, я осуществил рефакторинг вниз в намного меньшие), которые 3-4x пока любая из aspx страниц/помощника, classes/ORMs на новом сайте.
Я однажды столкнулся с приложением .NET, которое было портировано от ASP. .aspx страницы были полностью пробелом. Для рендеринга UI разработчики использовали StringBuilders в коде позади и затем сделали response.write. Это было бы неправильным способом сделать это!
Я видел сделанный другой путь, код позади страницы был пробелом, за исключением объявления globals, затем VBScript оставили в ASPX.