第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何重命名重復的 MultiIndex 列名稱?

如何重命名重復的 MultiIndex 列名稱?

胡說叔叔 2023-03-01 17:03:52
我有一個包含兩級列索引的數據框??芍噩F的數據集。df = pd.DataFrame(   [ ['Gaz','Gaz','Gaz','Gaz'],    ['X','X','X','X'],    ['Y','Y','Y','Y'],    ['Z','Z','Z','Z']],columns=pd.MultiIndex.from_arrays([['A','A','C','D'],                          ['Name','Name','Company','Company']])我想重命名重復的 MultiIndex 列,僅當 level-0 和 level-1 組合重復時。然后在末尾添加一個后綴數字。就像下面的那個。下面是我找到的一個解決方案,但它只適用于單級列索引。class renamer():def __init__(self):    self.d = dict()def __call__(self, x):    if x not in self.d:        self.d[x] = 0        return x    else:        self.d[x] += 1        return "%s_%d" % (x, self.d[x])df = df.rename(columns=renamer())我認為可以修改上述方法以支持多級情況,但我對 pandas/python 太陌生了。提前致謝。@Datanovice 這是為了向您澄清我需要的輸出。我有下面的片段。import pandas as pdimport numpy as npdf = pd.DataFrame(   [ ['Gaz','Gaz','Gaz','Gaz'],    ['X','X','X','X'],    ['Y','Y','Y','Y'],    ['Z','Z','Z','Z']],columns=pd.MultiIndex.from_arrays([                        ['A','A','C','A'],                         ['A','A','C','A'],                        ['Company','Company','Company','Name']]))s = pd.DataFrame(df.columns.tolist())cond = s.groupby(0).cumcount()s = [np.where(cond.gt(0),s[i] + '_' + cond.astype(str),s[i]) for i in range(df.columns.nlevels)]s = pd.DataFrame(s)#print(s)df.columns = pd.MultiIndex.from_arrays(s.values.tolist())print(df)目前的結果是——我需要的是最后一段列索引不應該算作重復,因為“AA-Name”與前兩個不一樣。
查看完整描述

2 回答

?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

可能是執(zhí)行此操作的更好方法,但您可以從列中返回數據框并對它們應用條件操作并重新分配它們。


df = pd.DataFrame(

   [ ['Gaz','Gaz','Gaz','Gaz'],

    ['X','X','X','X'],

    ['Y','Y','Y','Y'],

    ['Z','Z','Z','Z']],

columns=pd.MultiIndex.from_arrays([['A','A','C','A'],

                          ['Name','Name','Company','Company']])



s = pd.DataFrame(df.columns.tolist())


cond = s.groupby([0,1]).cumcount()


s[0] = np.where(cond.gt(0),s[0] + '_' + cond.astype(str),s[0])

s[1] = np.where(cond.gt(0),s[1] + '_' + cond.astype(str),s[1])


df.columns = pd.MultiIndex.from_frame(s)


print(df)


0    A    A_1       C       D

1 Name Name_1 Company Company

0  Gaz    Gaz     Gaz     Gaz

1    X      X       X       X

2    Y      Y       Y       Y

3    Z      Z       Z       Z

http://img1.sycdn.imooc.com//63ff153e0001d47d03070168.jpg

查看完整回答
反對 回復 2023-03-01
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

嘗試這個 -


arrays = [['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],['A', 'A', 'A', 'B', 'C', 'C', 'D', 'D']]

tuples = list(zip(*arrays))


index = pd.MultiIndex.from_tuples(tuples)

df = pd.DataFrame(np.random.randn(3, 8), columns=index)

    A               B

    A   A   A   B   C   C   D   D

0   0   0   1   3   1   2   1   4

1   0   1   1   1   1   3   0   1

2   1   1   4   2   3   2   1   4


suffix = pd.DataFrame(df.columns)

suffix['count'] = suffix.groupby(0).cumcount()

suffix['new'] = [((i[0]+'_'+str(j)),(i[1]+'_'+str(j))) for i,j in zip(suffix[0],suffix['count'])]

new_index = pd.MultiIndex.from_tuples(list(suffix['new']))

df.columns = new_index


查看完整回答
反對 回復 2023-03-01
  • 2 回答
  • 0 關注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號