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

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何重命名重復(fù)的 MultiIndex 列名稱?

如何重命名重復(fù)的 MultiIndex 列名稱?

胡說叔叔 2023-03-01 17:03:52
我有一個(gè)包含兩級(jí)列索引的數(shù)據(jù)框??芍噩F(xiàn)的數(shù)據(jù)集。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']])我想重命名重復(fù)的 MultiIndex 列,僅當(dāng) level-0 和 level-1 組合重復(fù)時(shí)。然后在末尾添加一個(gè)后綴數(shù)字。就像下面的那個(gè)。下面是我找到的一個(gè)解決方案,但它只適用于單級(jí)列索引。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())我認(rèn)為可以修改上述方法以支持多級(jí)情況,但我對(duì) 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)目前的結(jié)果是——我需要的是最后一段列索引不應(yīng)該算作重復(fù),因?yàn)椤癆A-Name”與前兩個(gè)不一樣。
查看完整描述

2 回答

?
蕭十郎

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊

可能是執(zhí)行此操作的更好方法,但您可以從列中返回?cái)?shù)據(jù)框并對(duì)它們應(yīng)用條件操作并重新分配它們。


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

查看完整回答
反對(duì) 回復(fù) 2023-03-01
?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

嘗試這個(gè) -


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


查看完整回答
反對(duì) 回復(fù) 2023-03-01
  • 2 回答
  • 0 關(guān)注
  • 251 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)