为了账号安全,请及时绑定邮箱和手机立即绑定

如何划分不同大小的两列(Pandas)?

如何划分不同大小的两列(Pandas)?

梵蒂冈之花 2023-09-05 21:16:28
我有两个数据帧,它们是光谱测量(都有两列:Intensity和Wavelength),我需要在给定波长中将一个数据帧的强度除以另一个数据帧的强度,就像我除以两个函数 一样(I1 (λ) / I2 (λ))。困难在于两个数据帧具有不同的大小,并且Wavelength一个数据帧的值与另一个数据帧不完全相同(尽管显然它们“接近”)。一条大约有 200 条线(黑线),另一条大约有 3648 条(红线)。简而言之,红色图比黑色图“填充”得多,但正如我之前所说,Wavelength各个数据帧的值并不完全相同。它们也有不同的波长范围:300.2黑色从到795.5nm开始红色开始199.975于1027.43nm我喜欢做的是这样的:请注意,我将黑色的强度除以红色的强度,其对应的结果Wavelength被添加到新的 df 中。是否可以生成具有等效波长的新数据帧并在强度之间进行划分?
查看完整描述

1 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

这是您问题的有效解决方案。我目前的假设是仪器的采样率是相同的。由于您没有提供任何样本,所以我生成了一些数据。答案基于连接Wavelength列上的两个数据帧。


import pandas as pd

import numpy as np


##generating the test data

black_lambda = np.arange(300.2,795.5,0.1)

red_lambda = np.arange(199.975,1027.43,0.1)


I_black = np.random.random((1,len(black_lambda))).ravel()

I_red = np.random.random((1,len(red_lambda))).ravel()


df = pd.DataFrame([black_lambda,I_black]).T

df1 = pd.DataFrame([red_lambda,I_red]).T

df.columns=['lambda','I_black']

df1.columns=['lambda','I_red']

从这里开始:


#setting lambda as index for both dataframes

df.set_index(['lambda'],inplace=True)

df1.set_index(['lambda'],inplace=True)


#concatenating/merging both dataframes into one

df3 = pd.concat([df,df1],axis=1)


#since both dataframes are not of same length, there will be some missing values. Taking care of them by filling previous values (optional). 

df3.fillna(method='bfill',inplace=True)

df3.fillna(method='ffill',inplace=True)


#creating a new column 'division' to finish up the task

df3['division'] = df3['I_black'] / df3['I_red']


print(df3)

输出:


           I_black     I_red  division

lambda                                

199.975   0.855777  0.683906  1.251308

200.075   0.855777  0.305783  2.798643

200.175   0.855777  0.497258  1.720993

200.275   0.855777  0.945699  0.904915

200.375   0.855777  0.910735  0.939655

...            ...       ...       ...

1026.975  0.570973  0.637064  0.896258

1027.075  0.570973  0.457862  1.247042

1027.175  0.570973  0.429709  1.328743

1027.275  0.570973  0.564804  1.010924

1027.375  0.570973  0.246437  2.316917


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信