我有一个数据框(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