繁体   English   中英

使用 lambda 删除熊猫数据框的几行

[英]Drop few rows of a pandas dataframe using lambda

我目前在操作熊猫中的数据帧时遇到方法链问题,这是我的数据结构:

import pandas as pd

lst1 = range(100)
lst2 = range(100)
lst3 = range(100)
df = pd.DataFrame(
    {'Frenquency': lst1,
     'lst2Tite': lst2,
     'lst3Tite': lst3
    })

问题是如果频率小于6,则获取条目(行),但需要在方法链接中完成。

我知道使用传统方式很容易,我可以做

df[df["Frenquency"]<6]

得到答案。

但是,问题是关于如何使用方法链接来做到这一点,我尝试了类似的方法

df.drop(lambda x:x.index if x["Frequency"] <6 else null)

但它引发了一个错误"[<function <lambda> at 0x7faf529d3510>] not contained in axis"

任何人都可以就这个问题分享一些看法吗?

或者也许这个:

df.drop(i for i in df.Frequency if i >= 6)

或者就地使用:

df.drop((i for i in df.Frequency if i >= 6), inplace=True)

对于这种选择,您可以通过使用query方法来维护流畅的界面并使用方法链:

>>> df.query('Frenquency < 6')
   Frenquency  lst2Tite  lst3Tite
0           0         0         0
1           1         1         1
2           2         2         2
3           3         3         3
4           4         4         4
5           5         5         5
>>>

所以像:

df.rename(<something>).query('Frenquency <6').assign(<something>)

或者更具体地说:

>>> (df.rename(columns={'Frenquency':'F'})
...    .query('F < 6')
...    .assign(FF=lambda x: x.F**2))
   F  lst2Tite  lst3Tite  FF
0  0         0         0   0
1  1         1         1   1
2  2         2         2   4
3  3         3         3   9
4  4         4         4  16
5  5         5         5  25

感觉这篇文章没有解决问题精神的答案。 最友好的方式是(可能)使用 Panda 的.loc

import pandas as pd

lst1 = range(100)
lst2 = range(100)
lst3 = range(100)
df = pd.DataFrame({"Frequency": lst1, "lst2Tite": lst2, "lst3Tite": lst3})

df.loc[lambda _df: 6 < _df["Frequency"]]

简单的!

这能满足您的需求吗?

df.mask(df.Frequency >= 6).dropna()

这是一个老问题,但我会回答,因为没有可接受的答案供将来参考。

df[df.apply(lambda x: True if (x.Frenquency) <6 else False,axis=1)]

解释:此 lambda 函数检查频率,如果是,则分配 True 否则分配 False 以及 df 使用的 True 和 False 系列仅用于索引真值。 请注意,列名频率是一个错字,但我保持原样,因为问题是这样的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM