簡體   English   中英

如何重命名 header 並根據其他 header 名稱添加值(到此列)?

[英]How to rename a header and add values (to this column) based on other header name?

我有多個像這樣的 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

我想在Monthly Flow (2018)列中為nan分配年份,從而實現這個 output:

       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 ,一次一個 dataframe。

但是,由於我有很多數據框(將來還會有更多),我想知道一種自動執行此操作的方法,例如通過從Monthly Flow (2018)列中提取年份值。

假設每月流量始終是第 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)

使用re

import re
def find_year(column):
    year = column.name
    return int(re.search(r'\d{4}',year).group(0))


df = df.rename(columns={'Unnamed: 0' : 'Year'})
# change 3 to match the column location of your target column
df['Year'] = df['Year'].fillna(find_year(df.iloc[:,3]))

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM