基于带有循环的“编码”整数应用浮点值
Posted
技术标签:
【中文标题】基于带有循环的“编码”整数应用浮点值【英文标题】:Apply floating point values based on 'coded' integers with loops 【发布时间】:2018-01-04 21:48:17 【问题描述】:我有一个整数数据框,我想根据整数值将浮点值映射到。浮点列表示它们应该映射到的整数值。对于浮点数据帧中的每个时间步,都应该创建一个新的数据帧。我希望的最终产品实际上是一个浮点栅格。
整数的数据框可以是:
df = pd.DataFrame(np.random.randint(0,4,size=(5,5)))
print(df)
0 1 2 3 4
0 1 3 2 3 0
1 3 3 0 1 3
2 1 1 0 2 3
3 3 0 3 0 3
4 1 1 3 0 1
浮点值可以是:
df2 = pd.DataFrame(np.random.random(25).reshape(5,5),
index=pd.date_range(start='2012-1-1',end='2012-6-1',freq='M'))
print(df2)
0 1 2 3 4
2012-01-31 0.892510 0.186048 0.960318 0.415110 0.930342
2012-02-29 0.944020 0.497700 0.735165 0.106957 0.640663
2012-03-31 0.135279 0.472433 0.761687 0.565476 0.482689
2012-04-30 0.630033 0.719444 0.078893 0.070138 0.392354
2012-05-31 0.686622 0.823896 0.551767 0.898720 0.569068
到目前为止,我已经能够通过明确地运行代码和时间步骤来处理 mask
的不雅行为。
# Crop code is the column in df2(float) and value in df(int)
cropcode = 1
# 2012-01-31
ts = 0
df.mask( df == cropcode, df2[cropcode][ts],inplace=True)
print(df)
0 1 2 3 4
0 0.186048 3.000000 2 3.000000 0.000000
1 3.000000 3.000000 0 0.186048 3.000000
2 0.186048 0.186048 0 2.000000 3.000000
3 3.000000 0.000000 3 0.000000 3.000000
4 0.186048 0.186048 3 0.000000 0.186048
...以此类推,直到所有值都被替换。在此示例中,将有 5 个生成的浮点栅格,每个月一个。我似乎无法找到一个好的循环来为我完成这项工作。
【问题讨论】:
抱歉,您的最终预期输出是什么? 在本例中,它将是通过将整数值替换为浮点数据帧的相应列中的值而创建的 5 个数据帧。对于第一个时间步,新数据帧将是 5x5,所有 0 替换为 0.89251,1 替换为 0.186048,依此类推。我希望的最终产品实际上是一个浮点栅格 不,请在你的问题中写下你的输出。 【参考方案1】:只有一种方法
df2.columns=df.columns.astype(int)
df.replace(df2.T.iloc[:,0].to_dict())
Out[15]:
0 1 2 3 4
0 0.186048 0.415110 0.960318 0.415110 0.892510
1 0.415110 0.415110 0.892510 0.186048 0.415110
2 0.186048 0.186048 0.892510 0.960318 0.415110
3 0.415110 0.892510 0.415110 0.892510 0.415110
4 0.186048 0.186048 0.415110 0.892510 0.186048
带有for循环
l = []
for i in df2.columns:
l.append(df.replace(df2.T.iloc[:,i].to_dict()))
【讨论】:
啊,我喜欢 df.replace 解决方案。使用您的循环解决方案,我得到了一个完全相同的数据框列表。以上是关于基于带有循环的“编码”整数应用浮点值的主要内容,如果未能解决你的问题,请参考以下文章