我创建了两个列表:
list_1 = [a,b,c,d]
list_2 = [1,2,3,4]我还创建了一个Dataframe:
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]但它会循环遍历所有Day1s。有什么方法可以做到这一点吗?非常感谢!
发布于 2020-10-24 23:32:46
使用ne-shift技巧找到连续序列中第一个“DayN”的位置,并将您的值填充到这些匹配的日期中。
# 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 Nonehttps://stackoverflow.com/questions/64513826
复制相似问题