[英]How to rename column names according to value of columns
嘗試這個:
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.