我目前在处理pandas中的数据帧时遇到了方法链问题,这是我数据的结构:
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"
有人可以就此问题分享一些看法吗?
答案 0 :(得分:1)
或许这个:
df.drop(i for i in df.Frequency if i >= 6)
或使用inplace:
df.drop((i for i in df.Frequency if i >= 6), inplace=True)
答案 1 :(得分:0)
这会满足您的需求吗?
df.mask(df.Frequency >= 6).dropna()
答案 2 :(得分:0)
对于这种选择,您可以使用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
答案 3 :(得分:0)
感觉这个帖子没有解决问题精神的答案。链上最友好的方式是(可能)使用熊猫的.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"]]
简单!
答案 4 :(得分:0)
这是一个老问题,但我会回答,因为没有可接受的答案供将来参考。
df[df.apply(lambda x: True if (x.Frenquency) <6 else False,axis=1)]
解释: 这个 lambda 函数检查频率,如果是,它分配 True 否则分配 False 和 df 使用的一系列 True 和 False 仅用于索引真值。请注意,列名频率是一个错字,但我保持原样,因为问题是这样的。