Как заполнить определенные ячейки столбца, которые находятся в той же строке, что и другое наблюдение в другом столбце? - PullRequest
0 голосов
/ 08 февраля 2019

У меня в основном есть столбец с почтовыми индексами, а другой столбец с окрестностями, и у меня есть некоторые нулевые значения для заполнения в столбце почтового индекса.Итак, сначала я нашел, какой район соответствует тому почтовому индексу, который отсутствует.Во-вторых, я узнал, что является наиболее распространенным почтовым индексом в этом районе.

Ниже приведены некоторые почтовые индексы района X. Режим для этого конкретного района, скажем, Y. Что я пытаюсь сделатьто есть, взяв строки, имеющие окрестность X под столбцом окрестности, заполните соответствующий столбец почтовых индексов, где значения равны нулю.

Это режим для окрестности X. Он возвращает фактический режим (BS8) иполный список со всеми почтовыми индексами, относящимися к окрестности X

 <bound method Series.mode of 25      BS8 

    1904    BS1 
    1919    BS8 
    2070    BS1 
    2083    BS1 
    2099     NaN
    2105    BS1 
    2228     NaN
    2256    BS1 
    2265    BS8 
    2285    BS8 
    2298    BS8

Так что в этом случае я бы хотел заполнить значение nan для почтового индекса наиболее распространенным типом почтового индекса для ЧЧ.

neighbourhood      Postcode
WH                 BS9 
SB                 BS9 
HF                 BS9 
WH                 BS9 
WH                 BS9 
SB                 BS9 
HH                 nan
SGTH               nan

Если самым распространенным почтовым индексом для HH был, скажем, Z, если вы хотите заполнить его соответствующим почтовым индексом, например:

neighbourhood      Postcode
    WH                 BS9 
    SB                 BS9 
    HF                 BS9 
    WH                 BS9 
    WH                 BS9 
    SB                 BS9 
    HH                 Z
    SGTH               nan

После просмотра в Интернете я попробовал что-то вроде приведенного ниже кода, ноэто не сработало.

airbnb.postcode = airbnb.apply( 
        lambda row: "BS8 " if (airbnb.neighbourhood=="HH" & airbnb.postcode== np.NaN) else row.postcode )

1 Ответ

0 голосов
/ 08 февраля 2019

Использование np.select

данные:

# df2:
#       neighbourhood Postcode
#     0            WH      BS9
#     1            SB      BS9
#     2            HF      BS9
#     3            WH      BS9
#     4            WH      BS9
#     5            SB      BS9
#     6            HH      BS8
#     7          SGTH      NaN

conditions = [
    ((df2['neighbourhood'] == 'HH') & (df2['Postcode'].isna())),
]

choices = [
    'BS8'
]

df2['Postcode'] = np.select(conditions, choices, df2['Postcode'])

  neighbourhood Postcode
0            WH      BS9
1            SB      BS9
2            HF      BS9
3            WH      BS9
4            WH      BS9
5            SB      BS9
6            HH      BS8
7          SGTH      NaN
...