我创建了两个列表:
list_1 = [a,b,c,d]
list_2 = [1,2,3,4]
我还创建了一个数据帧:
Day Subject
Day1
Day2
Day3
然后,我使用df = df.loc[df.index.repeat(3)]
复制该行,使其在每一天的中循环多次
Day Subject
Day1
Day1
Day1
Day2
Day2
Day2
Day3
Day3
Day3
Day1
...
我想将list_1插入每个"Day1"的第一次出现,将list_2插入"Day2",这样输出应该像一样
Day Subject
Day1 a
Day1
Day1
Day2 1
Day2
Day2
Day3
Day3
Day3
Day1 a
...
我想用
for i in range(0, df.shape[0]-1):
if df.iloc[i, 1] == 'Day1':
df.iloc[i, 2] = list_1[0]
但它会循环到所有的第1天。有什么方法可以做到这一点吗?非常感谢!
使用ne-shift
技巧来查找第一个"第N天;s,并将您的值填入匹配的天数中。
# sample dataset
days = np.tile(np.array(["Day1","Day2","Day3"]).repeat(3), 2)
df = pd.DataFrame(days, columns=["Day"])
# mark the first consecutive days
df["first"] = df["Day"].ne(df["Day"].shift())
# fill in the values
df["Subject"] = None
df.loc[df["first"] & (df["Day"] == "Day1"), "Subject"] = "a"
df.loc[df["first"] & (df["Day"] == "Day2"), "Subject"] = 1
输出
df
Out[2]:
Day first Subject
0 Day1 True a
1 Day1 False None
2 Day1 False None
3 Day2 True 1
4 Day2 False None
5 Day2 False None
6 Day3 True None
7 Day3 False None
8 Day3 False None
9 Day1 True a
10 Day1 False None
11 Day1 False None
12 Day2 True 1
13 Day2 False None
14 Day2 False None
15 Day3 True None
16 Day3 False None
17 Day3 False None