基于带有循环的“编码”整数应用浮点值

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 解决方案。使用您的循环解决方案,我得到了一个完全相同的数据框列表。

以上是关于基于带有循环的“编码”整数应用浮点值的主要内容,如果未能解决你的问题,请参考以下文章

汇编代码还原第一讲,基本类型以及浮点编码.

[libmpg123强制浮点输出,当我使用整数编码读取mp3时

while循环和编码

特征工程

高效的编码帮助

python数据类型变量以及编码和字符串格式化