合并 Pandas 数据框中的 2 列,用前一个值填充 NaN [重复]

Posted

技术标签:

【中文标题】合并 Pandas 数据框中的 2 列,用前一个值填充 NaN [重复]【英文标题】:merge 2 columns in pandas dataframe filling the NaNs with the previous value [duplicate] 【发布时间】:2017-10-16 20:25:07 【问题描述】:

我有一个数据框:

         State                           RegionName
0      Alabama                              Alabama
1          NaN                               Auburn
2          NaN                             Florence
3          NaN                         Jacksonville
4          NaN                           Livingston
5          NaN                           Montevallo
6          NaN                                 Troy
7          NaN                           Tuscaloosa
8          NaN                             Tuskegee
9       Alaska                               Alaska
10         NaN                            Fairbanks
11     Arizona                              Arizona
12         NaN                            Flagstaff
13         NaN                                Tempe
14         NaN                               Tucson

如何退货

DataFrame([["Alabama", "Auburn"], 
           ["Alabama", "Florence"], .
            .., 
           ["Alaska", "Fairbanks"],  
           ["Arizona", "Flagstaff"],  
           ...], columns=["State", "RegionName"])

所以所有值都很好地合并了?

我曾尝试过:df['State'] = df['State'].apply(lambda x: df['RegionName']),但它缺少在新的 RegionName 启动时为 RegionName 分配新 State 的逻辑。

【问题讨论】:

【参考方案1】:

你可以试试fillna。

df=pd.DataFrame([["Alabama", "Auburn"],
               [np.nan, "Florence"],
               [np.nan, "Fairbanks"],
               ["Arizona", "Flagstaff"]], columns=["State", "RegionName"])
df
Out[94]: 
     State RegionName
0  Alabama     Auburn
1      NaN   Florence
2      NaN  Fairbanks
3  Arizona  Flagstaff


df.fillna(method='ffill')
Out[95]: 
     State RegionName
0  Alabama     Auburn
1  Alabama   Florence
2  Alabama  Fairbanks

【讨论】:

【参考方案2】:

需要ffill:

df['State'] = df['State'].ffill()
print (df)
      State    RegionName
0   Alabama       Alabama
1   Alabama        Auburn
2   Alabama      Florence
3   Alabama  Jacksonville
4   Alabama    Livingston
5   Alabama    Montevallo
6   Alabama          Troy
7   Alabama    Tuscaloosa
8   Alabama      Tuskegee
9    Alaska        Alaska
10   Alaska     Fairbanks
11  Arizona       Arizona
12  Arizona     Flagstaff
13  Arizona         Tempe
14  Arizona        Tucson

【讨论】:

在我看来,这是第一个以.ffill() 为答案的问题。 @DSM - 我觉得它很棒;) 我想我的意思是以前可能已经问过一个答案如此简单的问题,而不是再次回答它,我们应该找到骗子。当我得到一秒钟的时间时,我可以自己找到一个好的目标,如果没有其他人还没有。 你真的很亲密df1 = df[df['State'] != df['RegionName']] 然后使用参数drop=True - df1 = df[df['State'] != df['RegionName']].reset_index(drop=True)

以上是关于合并 Pandas 数据框中的 2 列,用前一个值填充 NaN [重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据 Pandas 中的公共列值合并两个数据框

Pandas使用列标题作为值将多个列转换/合并为单个列

Pandas:如何根据特定列上特定值的条件选择数据框中的行[重复]

如何将数据框中的多列合并为 Pandas 日期时间格式

减去 Pandas 或 Pyspark 数据框中的连续列

在 Pandas 数据框中查找唯一值,无论行或列位置如何