python - 根据 DataFrame 中的值重命名具有相同列名的列
问题描述
我有一个 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”。还有其他方法可以根据位置重命名吗?
解决方案
新列名的单一列表理解:
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)]
推荐阅读
- jsonpath - 使用 jsonpath 从 json 获取密钥不起作用
- python - 从循环中的列表中选择项目时出现问题
- ruby-on-rails - 如何在系统测试期间在电子邮件链接中正确设置端口?
- mongodb - MongoDB $merge 存储相同 slug 的多条记录
- python - 检查不同df中的值并总结另一个df中的值
- reactjs - 将 MUI 样式应用于非 MUI 标记元素
- stm32 - STM32 SPI 从机模式无法正常传输
- javascript - Node.JS 在文件夹中找不到模块
- spartacus-storefront - 向产品字段调用 Spartacus 添加其他属性
- ios - Xcode 13 中的另一个选择器