簡體   English   中英

如何根據列的值重命名列名

[英]How to rename column names according to value of columns

我需要安排一個 Pandas DataFrame 的值不在右列中。 我想根據我擁有的前綴重新排列單元格中的值,並將“未知”列及其值推到 dataframe 的末尾。

我有以下 dataframe:

在此處輸入圖像描述

我正在尋找的 output 是:“已知”值具有 header 而未知數(5、6)到最后。 “規則”:如果沒有帶有“|”的單元格在列中,則列名將不會更改。

在此處輸入圖像描述

我可以嘗試的任何建議都對解決這個問題非常有幫助。

嘗試這個:

import pandas as pd
rename_dict = {} # reset rename dictionay
df = pd.DataFrame({'1':['name | Steve', 'name | John'],  
                   '2':[None, None],
                    '3':[None , 'age | 50']})
for col in df.columns:
    vals = df[col].values # look at values in each column
    vals =  [x for x in vals if x] # remove Nulls
    vals = [x for x in vals if '|' in x] # leave values with | only
    if len(vals) > 0:
        new_col_name = vals[0].split('|')[0] # getting the new column name
        rename_dict[col] = new_col_name # add column names to rename dictionay
df.rename(columns=rename_dict, inplace = True) # renaming the column name
df

          name      2      age 
0  name | Steve  None      None
1   name | John  None  age | 50

它看起來有點棘手,並不完全符合您的預期,但它可能會讓您了解如何解決您的任務:

df = pd.DataFrame([['email | 1@mail.com','name | name1','surname | surname1','','',''],
                   ['email | 2@mail.com','','name | name2','occupation | student','surname | surname2','abc | 123']])


df.apply(lambda x: pd.Series(dict([tuple(i.split(' | ')) for i in x.tolist() if i])),axis=1)

>>> out
'''
   abc       email   name occupation   surname
0  NaN  1@mail.com  name1        NaN  surname1
1  123  2@mail.com  name2    student  surname2

你可以試試這個解決方案:

my_dict = {}
def createDict(ss):
    for i in range(1, 7, 1):
        sss = ss[i].split('|')
        if len(sss) > 1:
            if sss[0].strip() in my_dict:
                my_dict[sss[0].strip()].append(ss[i])
            else:
                my_dict[sss[0].strip()] = [ss[i]]


df = df.apply(lambda x: createDict(x), axis=1)
dff = pd.DataFrame.from_dict(my_dict, orient='index')
dff = dff.transpose()

print(dff)

希望這能回答你的問題。

暫無
暫無

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

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