首页 > 解决方案 > 如何重命名标题并根据其他标题名称添加值(到此列)?

问题描述

我有多个像这样的 Pandas 数据框(不同年份):

df1=

        Unnamed: 0           b      c     Monthly Flow (2018)     
1              nan   -0.041619  43.91               -0.041619
2              nan    0.011913  43.91               -0.041619
3              nan   -0.048801  43.91               -0.041619
4              nan    0.002857  43.91               -0.041619
5              nan    0.002204  43.91               -0.041619
6              nan   -0.007692  43.91               -0.041619
7              nan   -0.014992  43.91               -0.041619
8              nan   -0.035381  43.91               -0.041619

我想分配给列nan中的年份Monthly Flow (2018),从而实现此输出:

       Year           b      c     Monthly Flow (2018)     
1      2018   -0.041619  43.91               -0.041619
2      2018    0.011913  43.91               -0.041619
3      2018   -0.048801  43.91               -0.041619
4      2018    0.002857  43.91               -0.041619
5      2018    0.002204  43.91               -0.041619
6      2018   -0.007692  43.91               -0.041619
7      2018   -0.014992  43.91               -0.041619
8      2018   -0.035381  43.91               -0.041619

我知道如何用nan特定年份替换这些,一次一个数据框。

但是,由于我有很多数据框(将来还会有更多),我想知道一种自动执行此操作的方法,例如从 column 中提取年份值Monthly Flow (2018)

标签: pythonpandasdataframe

解决方案


假设每月流量始终是第 5 列,您可以这样做:

import re
df = df.rename(columns={'Unnamed: 0': 'Year'})
df.iloc[:,0] = re.search('\d{4}', df.columns[4]).group(0)

解释:

re.search连续查找 4 个数字并从第五列中提取它们。

我将Unnamed列重命名为Year.

工作代码:

import pandas as pd
import numpy as np
import re
df = pd.DataFrame({'Unnamed: 0': {0: np.nan},
 'a': {0: 1},
 'a2': {0: 1},
 'a3': {0: 1},
 'Monthly Flow (2018)': {0: 'b'}})
df = df.rename(columns={'Unnamed: 0': 'Year'})
df.iloc[:,0] = re.search('\d{4}', df.columns[4]).group(0)

推荐阅读