pandas - проблема с извлечением данных, извлеченных с помощью функции unstack, заполняет нулевые значения 0 - PullRequest
0 голосов
/ 25 ноября 2018

Я создал фрейм данных следующим образом

df_gr_1971 = df.where(df.year == 1971).groupby(['year', 'ID1', 'ID2']).size().unstack(fill_value='0')

list_all71 = [(list(i), v) for i, v in df_gr_1971.stack().iteritems()]
list_all71 = pd.DataFrame(list_all71, columns=["ID3", "count"])
list_all71

cols = ['year', 'ID1', 'ID2']
s = df.where(df.year == 1971).groupby(cols).size().unstack(fill_value='0').stack()

L = [{'year_1971': idx[0], 'ID3': list(idx[1:]), 'count': vals} for idx, vals in s.items()]
df_list_all71 = pd.DataFrame(L)

df_list_all71

результаты выглядят так:

      ID3     count year_1971
0   [11, B6]    2   1971.0
1   [11, H1]    1   1971.0
2   [11, H2]    1   1971.0
3   [24, B6]    1   1971.0
4   [24, H1]    0   1971.0

, когда я хочу показать строки с количеством == 0, я используюэтот код

wsp_71 = df_list_all71[df_list_all71['count']==0]
wsp_71

но результат такой:

ID3 count   year

но я бы хотел увидеть этот результат

    ID3   count year_1971
4   [24, H1]    0   1971.0

любые идеи для решения этой проблемыпроблема?или я что-то не так понимаю?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Это должно работать, если предложенный вами df выглядит следующим образом:

>>> df
        ID3  count year_1971
0  [11, B6]      2    1971.0
1  [11, H1]      1    1971.0
2  [11, H2]      1    1971.0
3  [24, B6]      1    1971.0
4  [24, H1]      0    1971.0

>>> df[df['count']==0]
        ID3  count year_1971
4  [24, H1]      0    1971.0

Еще один прием с приведенным выше примером:

>>> df.loc[(df==0).any(axis=1)]
        ID3  count year_1971
4  [24, H1]      0    1971.0

ИЛИ

>>> df[(df.T == 0).any()]
        ID3  count year_1971
4  [24, H1]      0    1971.0
>>> pd.__version__
'0.23.3'
0 голосов
/ 25 ноября 2018

Есть проблема fill_value='0' - для несуществующих значений присваивается строка '0', поэтому необходимо:

.unstack(fill_value=0)

Теоретически решением должна быть фильтрация по строке '0', но смешивание числовыхсо строками не рекомендуется:

df_list_all71[df_list_all71['count']=='0']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...