【问题标题】:Remove row based on sum of numpy array within each entry in df column根据 df 列中每个条目中的 numpy 数组的总和删除行
【发布时间】:2021-10-14 19:49:08
【问题描述】:

我觉得我做的比它应该做的更难:我拥有的是一个数据框,其中包含一些列,其条目每个都包含 numpy 数组(包含这些数组的列的名称在一个名为 names_of_cols_that_contain_arrays 的数组中)。我想要做的是过滤掉这些 numpy 数组的总和值为 0 的行。 This is a similar question on which my code is based, but it doesn't seem to work with the iterator over rows in each column.

我目前在我的代码中是

for col_name in names_of_cols_that_contain_arrays:
  for i in range(len(df[col_name])):
    df = df[df[col_name][i].sum() > 0.0]

这似乎不是那么有效,但这是第一次尝试,明确地通过了我认为正确的方法。但这似乎返回一个布尔值,即

Traceback
...
KeyError: True

事实上,在大多数情况下,对于上面的代码,我会收到一些与返回的布尔值相关的错误。任何指针将不胜感激,在此先感谢!

【问题讨论】:

  • 您能提供示例数据框和您的预期输出吗?

标签: python arrays pandas dataframe numpy


【解决方案1】:

IIUC:

你可以试试:

df=df.loc[df['names_of_cols_that_contain_arrays'].map(sum)>0]
#OR
df=df.loc[df['names_of_cols_that_contain_arrays'].map(np.sum).gt(0)]

使用的示例数据框:

from numpy import array

d={'names_of_cols_that_contain_arrays': {0: array([-1,  0, -8]),
  1: array([-1, -2,  5])}}

df=pd.DataFrame(d)

【讨论】:

  • 啊,是的,这已经解决了问题! (只是添加了for col_name in names_of_cols_that_contain_arrays),直到最近我才意识到这个.map 函数是一个东西,直到现在才意识到它,认为我需要对它做更多的调查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 2020-03-13
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 2020-11-27
  • 2023-03-10
相关资源
最近更新 更多