假设我有一个groupby
对象,一个DataFrame或其他任何带有apply()
方法的东西。我希望某些元素不映射到任何输出。例如,对于我来说,我有一个groupby
,并且我希望满足某些条件的组被忽略。我怎样才能做到这一点?我在应用的函数中尝试过return None
,但是输出中仍然有该组的条目(它为null,但仍然存在)。
例如,假设一个DataFrame看起来像这样:
good_row 272.0 42440.0 29893408.0
good_row_2 142.0 22360.0 12965953.0
bad_row 171.0 26920.0 14726556.0
我想运行df.apply(fn, axis=1)
,以便对于好行,fn返回一些输出,对于坏行,fn告诉apply适用于“忽略”该行,并且输出中没有{{ 1}}。在这里,为了便于演示,我使用了DataFrame而不是groupby,但这是相同的想法。
答案 0 :(得分:1)
您可以用return pd.Series(index=['output_column1', 'output_column2', ...])
代替None
,然后删除所有都是NaN
值的行,如下所示:
cleaned_output_df = output_df.drop_na(axis=0, how='all')
或者,如果您事先知道不希望将函数应用到的行,则可以在使用apply
之前将其过滤掉。
df.loc[boolean_array].apply(your_function_goes_here)
或
df.query("column_a > 15").apply(your_function_goes_here)
您还可以使用其过滤功能来过滤groupby对象,有关示例,请参见docs。语法如下:
grouped = df.groupby('column_A')
filtered = grouped.filter(some_function_that_takes_a_df_and_returns_a_bool)
答案 1 :(得分:1)
首先过滤数据框,然后将函数应用于过滤后的结果。
让我们说,区分好行和坏行的标准是第二列与第三列的比率小于或等于deposit
。假设您要对所有单元格(符合条件)中的所有值求平方。您可以使用以下代码:
asch-cli -H 127.0.0.1 -P 4096 deposit --secret "" --dapp "" --currency "XAS" --amount 5000