как я могу передать подмножество строк пользовательской функции и вернуть список?

#python #pandas

#python #pandas

Вопрос:

Допустим, у меня есть эта функция, которая просто возвращает мне примененные аргументы и аргументы по умолчанию:

 def pattern(ch1=False,ch2=False,ch3=False,ch4=False):
    return [ch1,ch2,ch3,ch4]

x = pattern(ch4=True)
x

Out[77]:

[0, 0, 0, True]
  

Как я мог бы применить вышеуказанную функцию к подмножеству строк с аргументами из столбца «канал» следующего фрейма данных.

   df1 = pd.DataFrame({"sample":[1,2,3,4,5,6,7,8],
                    "channel":["ch1","ch2","ch3","ch4",
                              "ch1","ch2","ch3","ch4"
                              ],
                    "available":[True,True,True,True,
                            False,False,False,False,
                            ]
                    })
df1 = df1.set_index("sample")
df1
  

Допустим, я хочу передать индекс строки с 1 по 2, который должен установить параметру ch1 amp; ch2 значение True и вернуть [True, True, False, False]

вторым примером может быть передача строк с 4 по 5. Это должно возвращать [True, False, False,False]

Комментарии:

1. выглядит так pandas.DataFrame.apply

2. Попробуйте pattern(ch1=df1.loc[1, 'available'], ch2=df1.loc[2, 'available']) .

3. @ResidentSleeper: Я попробовал ваш код, и он работает, но я предпочитаю код josemz, поскольку он позволяет мне вырезать строки и передавать их функции, но спасибо за ваше предложение

Ответ №1:

Вот вариант:

 pattern(**dict(zip(df1.loc[:2].channel, df1.loc[:2].available)))
# [True, True, False, False]

pattern(**dict(zip(df1.loc[4:6].channel, df1.loc[4:6].available)))
# [False, False, False, True]
  

Комментарии:

1. большое спасибо за ваш код, он работает так, как я хотел! Я не знал, что могу передать пару ключ: значение с функцией zip. Это очень круто!!