Вы можете использовать это:
df = df.groupby(['Symbol','Year']).count().unstack(fill_value=0).stack()
print df
Выход:
Action
Symbol Year
AAPL 2001 2
2002 0
BAC 2001 0
2002 2
он различие между ветвлением/должностным лицом и динамическим подключением, помимо того, чтобы быть довольно искусственным,
Я не думаю его искусственное вообще. В основном они просто делают подразделение основанным на уровне интеграции. Если программа будет иметь "плагины", которые являются по существу огнем и забывают без интеграции уровня API, то получающуюся работу вряд ли будут считать полученной работой. Вообще говоря, плагин, который является просто forked/exec'ed, соответствовал бы этому критерии, хотя могут быть случаи, где он не делает. Этот случай особенно применяется, если "сменный" код работал бы независимо от Вашего кода также.
Если с другой стороны, код будет очень зависеть от работы GPL'ed, будет таков как обширный вызов API или трудной интеграции структуры данных, то вещи, более вероятно, будут считать полученной работой. Т.е., "плагин" не может существовать самостоятельно без продукта GPL, и продуктом с этим установленным плагином является по существу полученная работа продукта GPLed.
Таким образом для создания этого немного более ясным те же принципы могли относиться интерпретируемому коду. Если бы интерпретируемый код полагается в большой степени на Ваши API (или наоборот) затем это считали бы полученной работой. Если это - просто сценарий, который выполняется самостоятельно с чрезвычайно небольшой интеграцией, то это не может.
Это имеет больше смысла?
@Daniel
Различие между ветвлением/должностным лицом и динамическим подключением, помимо того, чтобы быть довольно искусственным, не переносит на интерпретируемые языки: что относительно плагина Python/Perl/Ruby, который загружается через импорт или execfile?
Я не уверен, что различие искусственно. После динамической нагрузки сменный код совместно использует контекст выполнения с кодом GPLed. После ветвления/должностного лица это не делает.
В anycase я предположил бы это import
луг заставляет новый код работать в том же контексте выполнения, как GPLed укусил, и необходимо рассматривать его как случай динамического канала. Нет?
Сколько информации Вы совместно используете между Плагинами и основной программой? Если Вы делаете что-то большее чем просто выполняете их и ожидаете результатов (совместное использование никаких данных между программой и плагином в процессе) затем, Вам могли, скорее всего, сойти с рук они являющийся собственным, иначе они должны будут, вероятно, быть GPL'd.