我刚出生在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
.
.
.
如何实现这种输出?
答案 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