Другой вопрос был назван дубликатом этого:
В C ++ почему результат cout << x
отличается от значения, которое показывает отладчик для x
?
x
в вопросе - это переменная float
.
Одним из примеров может быть
float x = 9.9F;
Отладчик показывает 9.89999962
, вывод работы cout
- 9.9
.
Ответ оказывается, что точность cout
по умолчанию для float
равна 6, поэтому она округляется до шести десятичных цифры
См. здесь для справки
Вы можете использовать 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
Шаг 1. Создайте фрейм данных, в котором хранится счет каждого ненулевого класса в столбцах count
count_df = df.groupby(['Symbol','Year']).size().reset_index(name='counts')
. Шаг 2: Теперь используйте pivot_table для получения нужного кадра данных с подсчетом как для существующих, так и для несуществующие классы.
df_final = pd.pivot_table(count_df,
index=['Symbol','Year'],
values='counts',
fill_value = 0,
dropna=False,
aggfunc=np.sum)
Теперь значения счетчиков можно извлечь как список с помощью команды
list(df_final['counts'])
Если вы хотите сделать это без использования pivot_table, вы можете попробовать следующий подход:
midx = pd.MultiIndex.from_product([ df['Symbol'].unique(), df['Year'].unique()], names=['Symbol', 'Year'])
df_grouped_by = df_grouped_by.reindex(midx, fill_value=0)
То, что мы в основном делаем выше, это создание мультииндекса всех возможных значений, умножающих два столбцы, а затем используя этот мультииндекс, чтобы заполнить нули в нашей группе - с помощью dataframe.