我有一个DataFrame,可以包含具有相同列名的列。基于该值,我想重命名列名,因此没有重复项。我已经尝试了一些方法,但是每次尝试遍历列并重命名它们时,都会得到列名。 df.rename(columns = df.columns [i]:'some_name'})似乎也使用列名。
假设我有一个数据框;
df = pd.DataFrame({"A": [10kg], "B": [4], "A": [4%]})
我想基于行值重命名名为“ A”的列,以便获得
A B A%
0 10kg 4 4
我尝试过这样的事情:
for i in range(0, len(df.columns)):
if 'A' in df.columns[i]:
if '%' in df.iloc[:,i].values[0]:
df = df.rename(columns={df.columns[i]: 'A_%'})
但这也会重命名第一列“ A”。有另一种方法可以根据位置重命名吗?
答案 0 :(得分:2)
对新列名称的单列表理解:
import pandas as pd
df = pd.concat([pd.DataFrame({"A": ['10kg'], "B": ['4']}),
pd.DataFrame({"A": ['4%']})], axis=1)
df.columns = [c + '_%'
if df.applymap(lambda x: '%' in x).any(axis=0).iloc[ic]
else c for ic, c in enumerate(df.columns)]
编辑-更好:
import pandas as pd
df = pd.concat([pd.DataFrame({"A": ['10kg'], "B": ['4']}),
pd.DataFrame({"A": ['4%']})], axis=1)
has_percentage = df.applymap(lambda x: '%' in x).any(axis=0)
df.columns = [c + '_%' if has_percentage.iloc[ic]
else c for ic, c in enumerate(df.columns)]
答案 1 :(得分:1)
您可以创建一个包含所有列名的列表,更改该列表中的第i个列名,然后使用该列表重新定义列名:
for i in range(0, len(df.columns)):
if 'A' in df.columns[i]:
if '%' in df.iloc[:,i].values[0]:
columnnames = list(df.columns)
columnnames[i] = 'A_%'
df.columns = columnnames