在列中重复特定的范围值,并在数据框中显示

时间:2019-01-08 09:42:07

标签: python pandas

我刚出生在python中。请在以下查询中为我提供帮助:-

我的数据帧(df)中有8760条记录(行),

Temperature
    5      
   10      
    8
    3
    1
    .
    .
    .

我想为新列分配特定范围值(1到7或1到365),然后重复此范围直到同一列中的最后一条记录。 预期的结果是这样的:

DayNumber
    1
    2
    3
    4
    5
    6
    7
    1
    2
    3
    4
    5
    6
    7
    1
    2
    3
    .
    .
    .

如何实现这种输出?

3 个答案:

答案 0 :(得分:1)

我的方法更容易理解。由于我没有数据,因此我假设温度始终为10摄氏度。您可以用自己的来更改它。

import pandas as pd
temperature = [10] * 8760
days = []
row = 1
day = 1
while row <= 8760:
    days.append(day)
    day += 1
    row += 1
    if day == 8:
        day = 1
data = {"temperature": temperature, "day": days}
df = pd.DataFrame(data=data)

答案 1 :(得分:0)

最简单的方法:

您可以通过以下方式列出1到7:

a = list(np.arange(7)+1)

然后使用:

from itertools import cycle, islice
df['DayNumber'] = list(islice(cycle(a), len(df)))

这将使您可以在列表中循环n次,这是数据帧的长度。

365个条目所花费的时间:

%timeit list(islice(cycle(a), len(df)))
#6.26 µs ± 78.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

答案 2 :(得分:0)

这似乎更容易

df = pd.DataFrame([range(10)]).T
df.columns = ["Temperature"]
df

   Temperature
0   0
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9

n=7
ll = pd.DataFrame(range(1, n+1)*(len(df)/n +1))
ll

    0
0   1
1   2
2   3
3   4
4   5
5   6
6   7
7   1
8   2
9   3
10  4
11  5
12  6
13  7

df.join(ll)

    Temperature  0
0   0            1
1   1            2
2   2            3
3   3            4
4   4            5
5   5            6
6   6            7
7   7            1
8   8            2
9   9            3