Python 问题:将基于列值选择的两个不同数据帧的值除以,返回NaN
我试图根据某些列值从两个不同的数据帧中选择值,并将它们相互分割。如果我尝试这个,我总是得到NaN值 我在下面添加了一个简化示例:Python 问题:将基于列值选择的两个不同数据帧的值除以,返回NaN,python,pandas,dataframe,Python,Pandas,Dataframe,我试图根据某些列值从两个不同的数据帧中选择值,并将它们相互分割。如果我尝试这个,我总是得到NaN值 我在下面添加了一个简化示例: df = pd.DataFrame({'col1':['a','b','c','d'], 'col2':['x1','x2','x3','x4'], 'col3':[10,3,2,8]}) print(df) df1 = pd.DataFrame({'col1':['a1','b1','c1
df = pd.DataFrame({'col1':['a','b','c','d'],
'col2':['x1','x2','x3','x4'],
'col3':[10,3,2,8]})
print(df)
df1 = pd.DataFrame({'col1':['a1','b1','c1','d1'],
'col2':['y1','y1','y3','y4'],
'col3':[5,4,1,6]})
print(df1)
a = df.loc[((df['col1']=='a')&(df['col2']=='x1')),'col3']
print(a)
b = df1.loc[((df1['col1']=='d1')&(df1['col2']=='y4')), 'col3']
print(b)
c = a/b
print(c)
如何克服这个问题?熊猫是如此强大,因为它在做某些动作时,例如数学方法时,会与指数保持一致 如果我们在您的示例中同时打印
a
和b
,我们可以看到它们的索引分别为0
和3
:
print(a.index)
print(b.index)
Int64Index([0], dtype='int64')
Int64Index([3], dtype='int64')
这意味着在执行操作a/b
时,pandas无法对齐任何值,因此返回NaN
您的解决方案是重置索引:
a.reset_index(drop=True) / b.reset_index(drop=True)
0 1.666667
Name: col3, dtype: float64
或强制转换为numpy
数组,因此我们将丢失索引:
a.to_numpy() / b.to_numpy()
array([1.66666667])
话虽如此,您的操作似乎并不符合逻辑,问题可能更深层。由于值的匹配现在没有任何意义。尝试
a.div(b.array)
或a/(b.array)
a
正在用值10
提取第0行,b
正在用值6
提取第3行。当您进行除法时,pandas试图用匹配行中的值进行除法,但由于a
没有第3行,b
没有第0行,因此两行都得到NaN。谢谢您,这非常有帮助,是的,我使用的实际数据帧要复杂得多,我只尝试使用一个简单的示例。但你的解决方案解决了这个问题!