【问题标题】:Add fractional component in Pandas在 Pandas 中添加小数部分
【发布时间】:2015-10-26 23:08:59
【问题描述】:

我有一个数据框,其中有一列的值如下:

1 1 1 1 2 2 2 2 3 3 3 3 等等

我想将值更改为

1.0 1.25 1.5 1.75 2.0 2.25 2.5 2.75 3.0 3.25 3.5 3.75 等

初始整数值总是单调递增的,但可能有间隙。它们总是会准确地重复 4 次。

我已经通过 for 循环实现了这一点,但这需要很长时间才能在大型数据集上运行。我正在寻找更有效的方法。

for i in range(len(df) // 4):
    for j in range(4):
        df.timestamp.iloc[i * 4 + j] += j / samples_per_sec

【问题讨论】:

  • 你是什么意思'可能有差距'。您能否提供此案例的样本?

标签: python pandas


【解决方案1】:

你可以这样做:

In [47]:
l=[1, 1, 1, 1, 2, 2, 2, 2 ,3 ,3 ,3, 3]
df = pd.DataFrame({'values':l})
df['values'] = df['values'] + (0.25 * (df.index.values % 4 ))
df

Out[47]:
    values
0     1.00
1     1.25
2     1.50
3     1.75
4     2.00
5     2.25
6     2.50
7     2.75
8     3.00
9     3.25
10    3.50
11    3.75

所以假设任何存在的值总是重复 4 次,正如你所说的,那么上面应该可以工作。

使用另一个有间隙的数据集:

In [48]:
l=[1, 1, 1, 1, 2, 2, 2, 2 ,4 ,4 ,4, 4,7,7,7,7]
df = pd.DataFrame({'values':l})
df['values'] = df['values'] + (0.25 * (df.index.values % 4 ))
df

Out[48]:
    values
0     1.00
1     1.25
2     1.50
3     1.75
4     2.00
5     2.25
6     2.50
7     2.75
8     4.00
9     4.25
10    4.50
11    4.75
12    7.00
13    7.25
14    7.50
15    7.75

【讨论】:

    【解决方案2】:

    你可以这样做

    df.timestamp += [(j % samples_per_sec)*1. / samples_per_sec for j in range(len(df))]
    

    注意:我假设samples_per_sec = 4。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2017-01-26
      相关资源
      最近更新 更多