如何在pandas数据框中自引用列?

2024-09-29 22:29:56 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python的Pandas中,我使用的数据帧如下:

drinks = pandas.read_csv(data_url)

其中data_url是指向CSV文件的字符串url

当索引所有“轻度饮酒者”的框架时,其中轻度饮酒者由1种饮品构成,应写下以下内容:

^{pr2}$

有没有更干巴巴的方式来自我参照“家长”?一、 例如:

drinks.light_drinker[self == 1]

Tags: 文件csv数据字符串框架urlpandasread
3条回答

在最新版本的pandas中,.where()还接受一个callable!在

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.where.html?highlight=where#pandas.DataFrame.where

因此,现在可以进行以下操作:

drinks.light_drinker.where(lambda x: x == 1)

这在方法链中特别有用。但是,这将只返回序列(而不是根据light_drinker列中的值过滤的数据帧)。这与你的问题是一致的,但我将详细说明另一个案件。在

要获取筛选的数据帧,请使用:

^{pr2}$

注意,这将保持self的形状(这意味着您将拥有所有条目都是NaN的行,因为该索引的light_drinker值的条件失败)。在

如果不想保留数据帧的形状(即希望删除NaN行),请使用:

drinks.query('light_drinker == 1')

请注意,DataFrame.indexDataFrame.columns中的项默认放置在query命名空间中,这意味着您不必引用自身。在

您现在可以根据需要使用queryassign

drinks.query('light_drinker == 1')

或者使df突变:

^{pr2}$

旧答案

目前还没有,但正在讨论对您想法的改进here。对于简单的情况,where就足够了。新的API可能如下所示:

df.set(new_column=lambda self: self.light_drinker*2)

我不知道有什么方法可以引用像熊猫中的self或{}这样的父对象,但是也许另一种可以被认为更枯燥的方法是where()。在

drinks.where(drinks.light_drinker == 1, inplace=True)

相关问题 更多 >

    热门问题