如何使用 df.add_suffix 为 Pandas 中的重复列名添加后缀?
How do I use df.add_suffix to add suffixes to duplicate column names in Pandas?
我有一个包含 400 列的大型数据框。 200 个列名与前 200 个重复。如何使用 df.add_suffix 仅向重复的列名添加后缀?
或者有更好的自动完成的方法吗?
你可以这样做:
import pandas as pd
# setup dummy DataFrame with repeated columns
df = pd.DataFrame(data=[[1, 2, 3]], columns=list('aaa'))
# create unique identifier for each repeated column
identifier = df.columns.to_series().groupby(level=0).transform('cumcount')
# rename columns with the new identifiers
df.columns = df.columns.astype('string') + identifier.astype('string')
print(df)
输出
a0 a1 a2
0 1 2 3
如果只有一个重复的列,你可以这样做:
# setup dummy DataFrame with repeated columns
df = pd.DataFrame(data=[[1, 2, 3, 4]], columns=list('aabb'))
# create unique identifier for each repeated column
identifier = df.columns.duplicated().astype(int)
# rename columns with the new identifiers
df.columns = df.columns.astype('string') + identifier.astype(str)
print(df)
输出 (仅重复一次)
a0 a1 b0 b1
0 1 2 3 4
如果我理解你的问题更正你有每个名字两次。如果是这样,可以使用 df.columns.duplicated()
请求重复值。然后您可以创建一个新列表,仅修改重复的值并添加您自定义的后缀。这与修改所有条目的其他已发布解决方案不同。
df = pd.DataFrame(data=[[1, 2, 3, 4]], columns=list('aabb'))
my_suffix = 'T'
df.columns = [name if duplicated == False else name + my_suffix for duplicated, name in zip(df.columns.duplicated(), df.columns)]
df
>>>
a aT b bT
0 1 2 3 4
我的回答有一个缺点,即如果一个名称被使用三次或更多次,数据框可能会有重复的列名。
添加以“_1”开头的编号后缀,从第一个重复的列开始,适用于多次出现的列。
E.g a column name list: [a, b, c, a, b, a] will return [a, b, c, a_1, b_1, a_2]
from collections import Counter
counter = Counter()
empty_list= []
for x in range(df.shape[1]):
counter.update([df.columns[x]])
if counter[df.columns[x]] == 1:
empty_list.append(df.columns[x])
else:
tx = counter[df.columns[x]] -1
empty_list.append(df.columns[x] + '_' + str(tx))
df.columns = empty_list
df.columns
我有一个包含 400 列的大型数据框。 200 个列名与前 200 个重复。如何使用 df.add_suffix 仅向重复的列名添加后缀?
或者有更好的自动完成的方法吗?
你可以这样做:
import pandas as pd
# setup dummy DataFrame with repeated columns
df = pd.DataFrame(data=[[1, 2, 3]], columns=list('aaa'))
# create unique identifier for each repeated column
identifier = df.columns.to_series().groupby(level=0).transform('cumcount')
# rename columns with the new identifiers
df.columns = df.columns.astype('string') + identifier.astype('string')
print(df)
输出
a0 a1 a2
0 1 2 3
如果只有一个重复的列,你可以这样做:
# setup dummy DataFrame with repeated columns
df = pd.DataFrame(data=[[1, 2, 3, 4]], columns=list('aabb'))
# create unique identifier for each repeated column
identifier = df.columns.duplicated().astype(int)
# rename columns with the new identifiers
df.columns = df.columns.astype('string') + identifier.astype(str)
print(df)
输出 (仅重复一次)
a0 a1 b0 b1
0 1 2 3 4
如果我理解你的问题更正你有每个名字两次。如果是这样,可以使用 df.columns.duplicated()
请求重复值。然后您可以创建一个新列表,仅修改重复的值并添加您自定义的后缀。这与修改所有条目的其他已发布解决方案不同。
df = pd.DataFrame(data=[[1, 2, 3, 4]], columns=list('aabb'))
my_suffix = 'T'
df.columns = [name if duplicated == False else name + my_suffix for duplicated, name in zip(df.columns.duplicated(), df.columns)]
df
>>>
a aT b bT
0 1 2 3 4
我的回答有一个缺点,即如果一个名称被使用三次或更多次,数据框可能会有重复的列名。
添加以“_1”开头的编号后缀,从第一个重复的列开始,适用于多次出现的列。
E.g a column name list: [a, b, c, a, b, a] will return [a, b, c, a_1, b_1, a_2]
from collections import Counter
counter = Counter()
empty_list= []
for x in range(df.shape[1]):
counter.update([df.columns[x]])
if counter[df.columns[x]] == 1:
empty_list.append(df.columns[x])
else:
tx = counter[df.columns[x]] -1
empty_list.append(df.columns[x] + '_' + str(tx))
df.columns = empty_list
df.columns