根据以前的条目按组构建新列
Construct new column based on previous entry by group
我有以下数据框:
import pandas as pd
score = [2,5,1,7,8,3,8,9,10,1]
group = ["A", "A", "B", "C", "C", "B", "A", "D", "D", "C"]
df = pd.DataFrame([group, score]).T
df.columns = ['Group', 'Score']
给出:
Group Score
0 A 2
1 A 5
2 B 1
3 C 7
4 C 8
5 B 3
6 A 8
7 D 9
8 D 10
9 C 1
我想构建一个新列,为给定组提供上一个条目。它还会删除没有先前条目的行。所以我的预期输出是这样的:
score = [5,8,3,8,10,1]
previous_score = [2, 7, 1, 5, 9, 8]
group = ["A", "C", "B", "A", "D", "C"]
df1 = pd.DataFrame([group, score, previous_score]).T
df1.columns = ['Group', 'Score', 'Previous Score']
给出:
Group Score Previous Score
0 A 5 2
1 C 8 7
2 B 3 1
3 A 8 5
4 D 10 9
5 C 1 8
我可以根据组将数据帧分成单独的数据帧并使用 shift
然后将它们粘在一起。但是,此数据的顺序很重要。我也可以只循环遍历数据框并找到上一个条目,但这效率很低。同样,我认为这将涉及一些 groupby
工作,但我不知道如何在不循环的情况下完成它。
您可以使用 groupby.shift
获取每个组的每一行中前一行的分数。然后 dropna
删除 NaN:
df = df.assign(Previous_Score=df.groupby('Group')['Score'].shift()).dropna().reset_index(drop=True)
输出:
Group Score Previous_Score
0 A 5 2
1 C 8 7
2 B 3 1
3 A 8 5
4 D 10 9
5 C 1 8
我有以下数据框:
import pandas as pd
score = [2,5,1,7,8,3,8,9,10,1]
group = ["A", "A", "B", "C", "C", "B", "A", "D", "D", "C"]
df = pd.DataFrame([group, score]).T
df.columns = ['Group', 'Score']
给出:
Group Score
0 A 2
1 A 5
2 B 1
3 C 7
4 C 8
5 B 3
6 A 8
7 D 9
8 D 10
9 C 1
我想构建一个新列,为给定组提供上一个条目。它还会删除没有先前条目的行。所以我的预期输出是这样的:
score = [5,8,3,8,10,1]
previous_score = [2, 7, 1, 5, 9, 8]
group = ["A", "C", "B", "A", "D", "C"]
df1 = pd.DataFrame([group, score, previous_score]).T
df1.columns = ['Group', 'Score', 'Previous Score']
给出:
Group Score Previous Score
0 A 5 2
1 C 8 7
2 B 3 1
3 A 8 5
4 D 10 9
5 C 1 8
我可以根据组将数据帧分成单独的数据帧并使用 shift
然后将它们粘在一起。但是,此数据的顺序很重要。我也可以只循环遍历数据框并找到上一个条目,但这效率很低。同样,我认为这将涉及一些 groupby
工作,但我不知道如何在不循环的情况下完成它。
您可以使用 groupby.shift
获取每个组的每一行中前一行的分数。然后 dropna
删除 NaN:
df = df.assign(Previous_Score=df.groupby('Group')['Score'].shift()).dropna().reset_index(drop=True)
输出:
Group Score Previous_Score
0 A 5 2
1 C 8 7
2 B 3 1
3 A 8 5
4 D 10 9
5 C 1 8