Выберите строки в DataFrame на основе логического теста в столбце в пандах - PullRequest
0 голосов
/ 24 июня 2018

Рассмотрим этот фрейм данных

my_input_df = pd.DataFrame({
'export_services': [[1],[],[2,4,5],[4,6]], 
'import_services': [[],[4,5,6,7],[],[]], 
'seaport':['china','mexico','africa','europe'], 
'price_of_fish':['100','150','200','250'],
'price_of_ham':['10','10','20','20']})

И я хочу сделать фильтр для export_services, который является логическим (отбрасывает пустые списки) и выводить только подмножество столбцов

my_output_df = pd.DataFrame({
'export_services': [[1],[2,4,5],[4,6]], 
'seaport':['china','africa','europe'], 
'price_of_fish':['100','200','250']})

Как бы я поступил об этом?

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Используя str.len

my_input_df.loc[my_input_df.export_services.str.len()>0,].drop(['import_services','price_of_ham'],1)
Out[220]: 
  export_services price_of_fish seaport
0             [1]           100   china
2       [2, 4, 5]           200  africa
3          [4, 6]           250  europe
0 голосов
/ 24 июня 2018

Преобразовать столбец в логическое значение, которое возвращает False s для пустых значений, поэтому возможно использование loc для фильтрации:

df = my_input_df.loc[my_input_df['export_services'].astype(bool), 
                     ['export_services','seaport','price_of_fish']]
print (df)
  export_services seaport price_of_fish
0             [1]   china           100
2       [2, 4, 5]  africa           200
3          [4, 6]  europe           250
...