我试图在Python中执行线性插值,以便根据某一列中的某些值计算插值值。
在下面的示例中,我希望使用插值中高度列中相关单元格的实际数值来插值产品"a“和"b”的测量值。我可以称高度列为插值的索引吗?
当我插值乘积"a“的缺失测量值时,用于插值的索引值为4、5和7。对于乘积"b”的插值,使用的索引值为1、2.2和3。
我知道dataframe.interpolate(),但我很难修改代码以使用正确的索引值。
下面是我开始使用的dataframe的代码:
import pandas as pd
testdata1 = [('Product', ['a', 'a', 'a', 'b', 'b', 'b','b']),
('Height', ['4', '5', '7', '1', '2.2', '3','4']),
('Measurement', ['35.00', '', '55.00','10.00','','30.00','40.00']),
]
df = pd.DataFrame.from_items(testdata1)
df

下面是我需要的数据文件的代码:
targetdf = [('Product', ['a', 'a', 'a', 'b', 'b', 'b','b']),
('Height', ['4', '5', '7', '1', '2.2', '3','4']),
('Measurement', ['35.00', '41.67', '55.00','10.00','22.00','30.00','40.00']),
]
df2 = pd.DataFrame.from_items(targetdf)
df2

如果不能用dataframe来完成这一任务,我愿意使用Python进行其他操作。
任何帮助都是非常感谢的。我是Python新手。谢谢。
发布于 2017-08-11 18:44:20
您可以首先使用一些数据清理:
#convert '' to `NaN`s and all strings to numeric
df['Measurement'] = pd.to_numeric(df['Measurement'], errors='coerce')
#convert strings to numeric
df['Height'] = df['Height'].astype(float)然后使用set_index、groupby和apply自定义函数和interpolate,最后通过reindex获得reset_index和列的原始顺序。
df1 = df.set_index('Height') \
.groupby('Product') \
.apply(lambda x: x.interpolate(method='index')) \
.reset_index() \
.reindex(columns=df.columns)
print (df1)
Product Height Measurement
0 a 4.0 35.000000
1 a 5.0 41.666667
2 a 7.0 55.000000
3 b 1.0 10.000000
4 b 2.2 22.000000
5 b 3.0 30.000000
6 b 4.0 40.000000https://stackoverflow.com/questions/45641846
复制相似问题