環境:Python 3.9.6,Pandas 1.3.5
我有一個 DataFrame 和一個如下所示的系列
df = pd.DataFrame({"C1" : ["A", "B", "C", "D"]})
sr = pd.Series(data = [1, 2, 3, 4, 5],
index = ["A", "A", "B", "C", "D"])
"""
[DataFrame]
C1
0 A
1 B
2 C
3 D
[Series]
A 1
A 2
B 3
C 4
D 5
"""
我試過的,
df["C2"] = df["C1"].map(sr)
但發生 InvalidIndexError 是因為該系列具有重復的鍵(“A”)。 pandas.errors.InvalidIndexError:重新索引僅對唯一值索引物件有效
有什么方法可以像下面這樣制作 DF 嗎?
C1 C2
0 A 1
1 A 2
2 B 3
3 C 4
4 D 5
or
C1 C2
0 A 1
1 B 3
2 C 4
3 D 5
4 A 2
行索引無關緊要。
uj5u.com熱心網友回復:
該問題經過大量編輯,現在具有非常不同的含義。
你想要一個簡單的merge:
df.merge(sr.rename('C2'),
left_on='C1', right_index=True)
輸出:
C1 C2
0 A 1
0 A 2
1 B 3
2 C 4
3 D 5
舊答案
首先,我不會重現您的問題(在 pandas 1.3.5 上用 3M 行測驗)。
那你為什么要使用切片而不是map呢?這將具有系統地輸出正確行數的優點(如果鍵不存在,則為 NaN):
例子:
sr = pd.Series({10:"A", 13:"B", 16:"C", 18:"D"})
df = pd.DataFrame({"C1":np.random.randint(10, 20, size=3000000)})
df['C2'] = df['C1'].map(sr)
print(df.head())
輸出:
C1 C2
0 10 A
1 18 D
2 10 A
3 13 B
4 15 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/412114.html
標籤:
