如何根据 python 中的条件重命名列名?

How to Rename Column name based on condition in python?

enter image description here我有一个包含 4 列的数据框,我必须根据其项目重命名列。 例子 : 如果大多数列项目是字符串,则将其重命名为 Name 如果大多数是浮点数,则将其重命名为值 请找到附图以供参考。

IIUC,这对你有用

这里发生的事情是 df[col].count() 将计算列中数值的数量。假设列的长度为 10,如果 count 大于 6,则假定列的多数为 numbers & 更改为 name nums。但是,将多个列命名为相同并不是一个好主意。

cols = df.columns
for col in cols:
    if (df[col].count()/df.shape[0]) > 0.5:
        df.rename({col:'nums'}, axis=1, inplace =True)
    else:
        pass

这个怎么样?

我们可以使用 select_dtypes 并将它们传递给列表以计算长度。

col_floats = df.select.dtypes(include='float').columns.tolist()
col_strings = df.select.dtypes(include='object').columns.tolist()

if len(col_floats) > len(col_strings):
    df.columns.map(lambda x : 'Values '  + x)
else:
    df.columns.map(lambda x : 'AOR ' + x)

您可以为您的用例编辑逻辑,但如果没有您的示例数据集和示例输出,很难说出您想要什么。

编辑

查看你的 DF,我发现你想测试每个数据帧系列中的数字,看看哪个更大,因为我们没有你的数据帧的文本样本,这很难说,但这样的事情可能工作 :

new_name = []

for columns in df.columns:
    n = pd.to_numeric(df[f'{columns}'],errors='coerce')
    if n.isna().sum() > n.dropna().count(): # tests if strings are greater than numbers
        new_name.append('AOR') 
    else:
        new_name.append('Value')

new_col_dict = dict(zip(df.columns.tolist(),new_name))

然后您可以简单地将 new_names 分配给您的列并使用 new_col_dict 字典检查输出。

在我自己的数据帧上进行测试,我在对象列中添加了一些随机整数,得到以下结果:

    {'Business Date': 'Value', 
 'First Name': 'AOR',
 'Hours': 'Value',
 'Last Name': 'AOR',
 'Number': 'Value',
 'Pay Code': 'Value',  # I added more ints than strings to this column and the test above worked.
 'Pay Time End': 'Value',
 'Pay Time Start': 'Value',
 'Site Name': 'AOR'}