【问题标题】:Populating a column based on values in another column - pandas根据另一列中的值填充一列 - 熊猫
【发布时间】:2020-11-26 23:46:41
【问题描述】:

合并两个数据框后,我的数据框中有一些空白,可以根据相邻列填充(我有更多列和 DF 中的行,但我专注于这三列): 示例 DF:

唯一 ID |类型 |位置

A         1       Land
A         NaN     NaN       
B         2       sub
B         NaN     NaN      
C         3       Land
C         3       Land

最后我想把三栏都填上:

唯一 ID |类型 |位置

A         1       Land
A         1       Land     
B         2       sub
B         2       sub    
C         3       Land
C         3       Land

我试过了:

df.loc[df.Type.isnull(), 'Type'] = df.loc[df.Type.isnull(), 'Unique ID'].map(df.loc[df.Type.notnull()].set_index('Unique ID')['Type'])

但它会抛出: InvalidIndexError:重新索引仅对具有唯一值的索引对象有效

我在这里缺少什么? - 谢谢

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

您的示例表明您要前向填充。你可以这样做(完整代码):

import pandas as pd
from io import StringIO

clientdata = '''ID        N       T
A         1       Land
A         NaN     NaN       
B         2       sub
B         NaN     NaN      
C         3       Land
C         3       Land'''

df = pd.read_csv(StringIO(clientdata), sep='\s+')

df["N"] = df["N"].fillna(method="ffill")
df["T"] = df["T"].fillna(method="ffill")
print(df)

【讨论】:

  • 可能是我提出问题的方式有问题,但假设 2 件事,上述内容会有所帮助 - 1)唯一 ID 的 DF 是按字母/数字顺序排列的,2)所有唯一 ID 都有一个至少一行包含我要填充的信息。我想我可以对数据框进行排序以处理第一个问题,但是大约有 15 个(共 85 个)唯一 ID 没有我需要的数据,并且 ffill 会将错误数据放入那些没有类型和位置的至少一个输入。删除空白的也不是真正的首选。
  • 这就是解决我的问题的方法。感谢您为我指明方向stackoverflow.com/questions/48816457/…
【解决方案2】:

最好的解决方案可能是去掉 NaN 行而不是覆盖它们。 Pandas 有一个简单的命令:

df.dropna()

这是它的文档:pandas.DataFrame.dropna

【讨论】:

    猜你喜欢
    • 2019-06-05
    • 1970-01-01
    • 2012-05-29
    • 2023-01-28
    • 2017-02-08
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多