我有一個數據框(df1),其中有一列'units',填充了nan空值或字符串。有條件地填充來自不同數據框的數據的熊貓列
df1
id s_type s_name s_unit
1 t1 n1 m2
2 t1 n5 m2
3 t2 n2 NaN
4 t6 n3 each
我有一個第二數據幀,(DF2),其具有類似的信息,雖然沒有標識。
df2
type name unit
t3 n4 cm2
t4 n2 m3
t2 n2 kg
t6 n0 Nan
我在努力開發一種表達
- 識別DF1行,其中單元是空,並從DF2
- 插入單元值在給DF1的單位列WHERE
- df1 ['type']與df2 ['type']匹配AND df1 ['name']與df2 ['name']匹配
在上述框架中,由於'type'和'name'都匹配,所以表達式將填充df1'unit'列的值爲'kg'。
類似的東西來:
df1.loc[df1['unit'].isnull(), 'unit'] = df2['unit'].where(
(df1['name'] == df2['name']) &
(df1['type'] == df2['type']))
雖然上面一行是生產 「ValueError異常:只能比較相同標記系列的對象。」
我查看了文檔和其他SO問題。並且處於虧損狀態。任何幫助將非常感激。
替代解決方案看起來更清潔,但似乎沒有在我的最終工作。 fillna()如何知道如何按名稱和類型進行過濾? – yvesva
索引相同,因爲左連接,所以可以使用'df ['unit_y']' – jezrael
謝謝。我最終使用了'df.loc [(df ['unit_x']。isnull(),'unit_x')] = df [unit_y']',並從那裏開始。 – yvesva