gpt4 book ai didi

python-3.x - Pandas 中的条件列选择

转载 作者:行者123 更新时间:2023-12-04 05:59:54 25 4
gpt4 key购买 nike

我想根据特定条件从 DataFrame 中选择列。我知道这可以通过循环来完成,但我的 df 非常大,所以效率至关重要。列选择的条件是只有非 nan 条目或只有 nan 的序列后跟只有非 nan 条目的序列。

这是一个例子。考虑以下 DataFrame:

pd.DataFrame([[1, np.nan, 2, np.nan], [2, np.nan, 5, np.nan], [4, 8, np.nan, 1], [3, 2, np.nan, 2], [3, 2, 5, np.nan]])

0 1 2 3
0 1 NaN 2.0 NaN
1 2 NaN 5.0 NaN
2 4 8.0 NaN 1.0
3 3 2.0 NaN 2.0
4 3 2.0 5.0 NaN

我只想从中选择第 0 列和第 1 列。关于如何在不循环的情况下有效地执行此操作的任何建议?

最佳答案

逻辑

  • 计算每列中的空值。如果只有空值在开头,则列中空值的数量应等于第一个有效索引的位置。
  • 获取第一个有效索引
  • 按空计数对索引进行切片并与第一个有效索引进行比较。如果它们相等,那么这是一个很好的专栏

cnull = df.isnull().sum()
fvald = df.apply(pd.Series.first_valid_index)
cols = df.index[cnull] == fvald
df.loc[:, cols]

enter image description here


编辑速度提升

旧答案

def pir1(df):
cnull = df.isnull().sum()
fvald = df.apply(pd.Series.first_valid_index)
cols = df.index[cnull] == fvald
return df.loc[:, cols]

使用相同的逻辑回答更快

def pir2(df):
nulls = np.isnan(df.values)
null_count = nulls.sum(0)
first_valid = nulls.argmin(0)
null_on_top = null_count == first_valid
filtered_data = df.values[:, null_on_top]
filtered_columns = df.columns.values[null_on_top]
return pd.DataFrame(filtered_data, df.index, filtered_columns)

enter image description here

关于python-3.x - Pandas 中的条件列选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40445648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com