繁体   English   中英

有条件地在Pandas数据框中填充空白值

Conditionally filling blank values in Pandas dataframes

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个数据场,如下所示(有更多列被删除):

    memberID    shipping_country    
    264991      
    264991       Canada
    100          USA    
    5000         
    5000         UK

我正在尝试用每个用户的运送国家/地区的现有值填充空白单元格:

    memberID    shipping_country    
    264991       Canada
    264991       Canada
    100          USA    
    5000         UK
    5000         UK

但是,我不确定在大规模数据集上执行此操作的最有效方法是什么。 也许使用矢量分组方式?

3 个回复

您可以使用GroupBy + ffill / bfill

def filler(x):
    return x.ffill().bfill()

res = df.groupby('memberID')['shipping_country'].apply(filler)

自定义功能是必需的,因为没有组合的Pandas方法可以按顺序ffillbfill

这也满足了特定memberID所有值均为NaN的情况; 在这种情况下,它们将保留为NaN

对于以下示例数据帧(我在shipping_country列中添加了一个仅包含''memberID组):

   memberID shipping_country
0    264991                 
1    264991           Canada
2       100              USA
3      5000                 
4      5000               UK
5        54                 

这应该对您memberID ,并且还具有以下行为:如果memberID组在shipping_country仅具有空字符串值( '' ),则这些值将保留在输出df

df['shipping_country'] = df.replace('',np.nan).groupby('memberID')['shipping_country'].transform('first').fillna('')

产量:

   memberID shipping_country
0    264991           Canada
1    264991           Canada
2       100              USA
3      5000               UK
4      5000               UK
5        54                 

如果要在输出df中将空字符串''保留为NaN ,则只需删除fillna('') ,则保留:

df['shipping_country'] = df.replace('',np.nan).groupby('memberID')['shipping_country'].transform('first')

您可以使用链接的groupby ,一个使用正向填充,另一个使用回填:

# replace blank values with `NaN` first:
df['shipping_country'].replace('',pd.np.nan,inplace=True)

df.iloc[::-1].groupby('memberID').ffill().groupby('memberID').bfill()

   memberID shipping_country
0    264991           Canada
1    264991           Canada
2       100              USA
3      5000               UK
4      5000               UK

此方法还将允许由所有NaN组成的组保留为NaN

>>> df
   memberID shipping_country
0    264991                 
1    264991           Canada
2       100              USA
3      5000                 
4      5000               UK
5         1                 
6         1                 

df['shipping_country'].replace('',pd.np.nan,inplace=True)

df.iloc[::-1].groupby('memberID').ffill().groupby('memberID').bfill()

   memberID shipping_country
0    264991           Canada
1    264991           Canada
2       100              USA
3      5000               UK
4      5000               UK
5         1              NaN
6         1              NaN
1 有条件地在Pandas数据框中填充值

我正在尝试将左侧的Pandas数据框重塑为右侧的数据框。 复制类型很容易 df['type'] = np.where(df.customer.str.match('DRIVER'), 'DRIVER', '') 但是我需要一些方法来捕获ID之间的整个间隔。 这是困难的部分。 一般 ...

2 无法在 Pandas 中填充空白值

我有一个数据框 0 女 1 女 2 3 女 4 女 性别列有一些 na 值,性别之间的分割是: 当尝试用 vale male 填充缺失值时,因为它是最常见的,使用以下代码: 我似乎得到了相同的值: 似乎没有改变 - 就法律而言,但 结果为假 然后当我尝试将数据类型更改为类别时 ...

3 有条件地填充数据帧中的值

我在数据框中有一列,我需要利用它来填充另一列。 我有四个值可以在此列中 - E、H、N 和 P。这些不同的值中的每一个都将用于填充“大小”列中的值。 我的数据示例如下: 我想填写“大小”列的每一行。 对于“E”类型,我想填写“2”。 对于“N”类型,我想填写“-” 对于“H”和“P”类型, ...

4 在R中填充空白数据框

我已经在搜索框中使用它,发现了类似的问题 ,但不完全相同。 看来这是一个容易的问题(我是R-newbee)。 我只是试图创建一个新的数据框并为其添加值。 毫不奇怪,R抛出错误,指出行不匹配。 这是代码 这是错误 $<-.data.frame ( *tmp* ...

2015-03-31 11:44:02 1 279   r
5 有条件地替换pandas数据帧中的空白值

我有一个数据框,其中包含一个稀疏填充的列。 大多数值都是空白的; 唯一的其他价值是“买入”和“卖出”。 如果最后一个非空白值为“买入”,或者如果最后一个非空白值为“卖出”,则我希望将空白值替换为“long”。 我可以在一个循环中轻松地做到这一点,但我想知道是否有一种非循环的方式来完成这个 ...

6 有条件地从pandas数据框中选择值

我有一个数据框,其中我想确定参加“我的大年”的每个人看到多少独特的鸟类。 我已经尝试过使用列表推导和for循环遍历每一行,并使用.is_unique()确定它是否唯一,但这似乎是困扰我很多的原因。 我可以通过.unique()很好地获得所有独特物种的列表,但我想以某种方式让与这些鸟类相关 ...

7 有条件地从上方的单元格填充空白行

我最初使用一些脚本,其中工作表中数据的前3列中的空白行是从上一行填充的。 脚本是: 尽管这对于这些列之间的空白行很好,但是我有一个问题,即空白与DI列中的文本一起不希望填充。 我尝试了类似的东西: 但是我在条件语句中使用此语法时遇到麻烦。 我希望粘贴。 我只想在D列中的J ...

8 如何有条件地对 Pandas 数据框求和

我正在寻找一种有效的方法(不循环)将一列添加到数据帧中,其中包含同一数据帧的一列的总和,并按行中的某些值进行过滤。 示例: 数据框: 我想添加一个列“orders_last_week”,其中包含给定日期前 7 天内该特定客户的订单总数。 Excel 等效项类似于: 所以这将是结果: ...

10 如何有条件地从 Pandas 数据框中删除行

我的目的是将purchases的主数据帧拆分为 2 个数据帧:一个正常的数据帧,一个包含依赖于 NaN 的异常值的数据帧。 下面的代码应该跨越数据帧长度,但它实际上抛出一个异常IndexError: index 4 is out of bounds for axis 0 with size 3 打 ...

暂无
暂无

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

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