考慮到這個樣本df:
df = pd.DataFrame({'num': [1, 2, 3], 'colors': ['red', 'green', 'blue'], 'letters': ['person1, person2', '', '']})
num colors letters
0 1 red person1, person2
1 2 green
2 3 blue
我習慣于使用 .map 來獲取字典并將值映射到列或新列。但是,這是一個轉折點。這是我試圖映射到“字母”列的字典,但僅將其應用于列值為空字串的行。
dict = {'red':['person1','person2'], 'green':['person3'], 'blue':['person5','person6']}
期望的結果是:
num colors letters
0 1 red person1, person2
1 2 green person3
2 3 blue person5, person6
嘗試了各種操作以這個結尾的現有 .map 函式的方法,但仍然沒有得到單個字串或僅在值為空的情況下才獲得具有兩個串列值的字串。
df.loc[(df.letters== ''),'letters']=df.letters.map(lambda x: dict[x][1] if x in dict else '')
我在想那里的一些字典熊貓敏銳的人已經遇到了這個問題。除了這些 .map 嘗試之外,我無法想辦法解決它。謝謝參觀。
uj5u.com熱心網友回復:
試試這個例子(我已重命名dict為dct.dict正在隱藏 Python 內置):
dct = {k: ", ".join(v) for k, v in dct.items()}
m = df.letters.eq("")
df.loc[m, "letters"] = df.loc[m, "colors"].map(dct)
print(df)
印刷:
num colors letters
0 1 red person1, person2
1 2 green person3
2 3 blue person5, person6
uj5u.com熱心網友回復:
另一種選擇是用 替換空字串NaN,將字典映射到colors列,然后使用fillna:
df = df.replace('', np.nan)
df['letters'] = df.letters.fillna(df.colors.map(dict_))
(您仍然需要將字典中的串列轉換為字串。)
uj5u.com熱心網友回復:
只需映射并使用 str.join 去除角括號
df = df.assign(letters=df['colors'].map(dict).str.join(','))
num colors letters
0 1 red person1, person2
1 2 green person3
2 3 blue person5, person6
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471956.html
