【问题标题】:How do I fill missing values in a column with already existing values in the same column?如何用同一列中已有的值填充列中的缺失值?
【发布时间】:2021-06-03 14:35:29
【问题描述】:

我有一个包含 3 列感兴趣的数据框(总共 30 列)。 一个是位置,第二个是名称,最后一个是描述,例如:

import pandas as pd

inp = [
    {"Location": "Boston", "Name": "Apple", "Description": "Green"},
    {"Location": "Paris", "Name": "Orange", "Description": ""},
    {"Location": "Paris", "Name": "Apple", "Description": ""},
    {"Location": "Austin", "Name": "orange", "Description": ""},
    {"Location": "Berlin", "Name": "Apple", "Description": ""},
]
df = pd.DataFrame(inp)
print(df)

输出:

Location    Name Description
0   Boston   Apple       Green
1    Paris  Orange       
2    Paris   Apple            
3   Austin  orange            
4   Berlin  Apple            

我有大约 10 000 个这样的列,我想根据“名称”=“波士顿”填充“描述”中的缺失值(不考虑“位置”),但不填充位置为“柏林”的行.

理想输出:

Location    Name Description
0   Boston   Apple       Green
1    Paris  Orange     
2    Paris   Apple       Green   
3   Austin  orange   
4   Berlin  Apple            

忽略柏林很简单:

df.loc[df["Location"] != "Berlin"]

输出:


    Location    Name    Description
0   Boston  Apple   Green
1   Paris   Orange 
2   Paris   Apple   
3   Austin  orange  

但我不知道如何填写缺失的描述。请记住,有很多不同的名称和描述(每个大约 1000 个)。

我知道我可以提取“波士顿”值,然后在“名称”上合并,但我觉得应该(并且可能是)一种更简单的方法。

【问题讨论】:

  • 等等。为什么输出中的第 4 行(idx 3)变成了“Austin Apple”?
  • 我的错误,现在更正了

标签: python python-3.x pandas


【解决方案1】:

先尝试groupby transform,然后通过loc分配回过滤柏林:

df.loc[
    df['Location'].ne('Berlin'),
    'Description'
] = df.groupby('Name')['Description'].transform('first')

df:

  Location    Name Description
0   Boston   Apple       Green
1    Paris  Orange            
2    Paris   Apple       Green
3   Austin  orange            
4   Berlin   Apple            

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多