- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
实际上我已经问过这个关于 SQL 的问题并且在这里得到了很好的答案: SQL - LAG to get previous value if condition using multiple previous columns satisfied
但现在 Pandas 需要它。假设我们有一个数据框:
df = pd.DataFrame({'id':[1,2,3,4,5,6,7,8],
'EventName':['Team A vs Team B',
'Team A vs Team B',
'Team C vs Team D',
'Team Z vs Team A',
'Team A vs Team B',
'Team C vs Team D',
'Team C vs Team D',
'Team E vs Team F',],
'HomeTeam': ['Team A', 'Team A', 'Team C', 'Team Z',
'Team A', 'Team C', 'Team C', 'Team E'],
'Metric':[5,7,6,8,9,3,1,2]})
结果是:
id EventName HomeTeam Metric
------------------------------------------
1 Team A vs Team B Team A 5
2 Team A vs Team B Team A 7
3 Team C vs Team D Team C 6
4 Team Z vs Team A Team Z 8
5 Team A vs Team B Team A 9
6 Team C vs Team D Team C 3
7 Team C vs Team D Team C 1
8 Team E vs Team F Team E 2
我想计算一个新列 PreviousMetricN,其中 N 可以是 1、2、3...,它显示 Metric 的先前值,但前提是 HomeTeam 参与了先前的事件。例如:
id EventName HomeTeam Metric PreviousMetric1 PreviousMetric2
------------------------------------------------------------------------
1 Team A vs Team B Team A 5 NULL NULL
2 Team A vs Team B Team A 7 5 NULL
3 Team C vs Team D Team C 6 NULL NULL
4 Team Z vs Team A Team Z 8 NULL NULL
5 Team A vs Team B Team A 9 8 7
6 Team C vs Team D Team C 3 6 NULL
7 Team C vs Team D Team C 1 3 6
8 Team E vs Team F Team E 2 NULL NULL
我想使用 for 循环会很容易。但我需要一个矢量化的解决方案或使用 shift
/groupby
/np.where
的某种组合。甚至不确定从哪里开始?
最佳答案
使用@Alollz结构:
df = pd.DataFrame({'id':[1,2,3,4,5,6,7,8],
'EventName':['Team A vs Team B',
'Team A vs Team B',
'Team C vs Team D',
'Team Z vs Team A',
'Team A vs Team B',
'Team C vs Team D',
'Team C vs Team D',
'Team E vs Team F',],
'HomeTeam': ['Team A', 'Team A', 'Team C', 'Team Z',
'Team A', 'Team C', 'Team C', 'Team E'],
'Metric':[5,7,6,8,9,3,1,2]})
dfe = df.assign(teams = df['EventName'].str.split(' vs ')).explode('teams')
shifts = [1, 2, 3]
for i in shifts:
mapper = dfe.groupby('teams')['Metric'].shift(i).mask(dfe['teams'] != dfe['HomeTeam']).drop_duplicates()
df[f'PreviousMetrics{i}'] = df.index.map(mapper)
df
输出:
id EventName HomeTeam Metric PreviousMetrics1 PreviousMetrics2 PreviousMetrics3
0 1 Team A vs Team B Team A 5 NaN NaN NaN
1 2 Team A vs Team B Team A 7 5.0 NaN NaN
2 3 Team C vs Team D Team C 6 NaN NaN NaN
3 4 Team Z vs Team A Team Z 8 NaN NaN NaN
4 5 Team A vs Team B Team A 9 8.0 7.0 5.0
5 6 Team C vs Team D Team C 3 6.0 NaN NaN
6 7 Team C vs Team D Team C 1 3.0 6.0 NaN
7 8 Team E vs Team F Team E 2 NaN NaN NaN
关于python - Pandas shift - 如果满足多个条件,则获取先前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66858486/
我的应用将 SceneKit 内容的“页面”与图像和文本交替。当我从图像页面前进到新的 SceneKit 页面时,前一个 SceneKit 页面中的内容会短暂显示,然后被新内容替换。时髦。 我只使用一
我正在尝试处理(在 C# 中)包含一些数字数据的大型数据文件。给定一个整数数组,如何对其进行拆分/分组,以便如果下一个 n(两个或更多)是负数,则前一个 n 元素被分组。例如,在下面的数组中,应该使用
刚接触promises,研究过。所以我的代码和我的理解: sql.connect(config).then(function(connection) { return connection.req
目前我在 if (roobaf) block 中有一些代码,这取决于 foo 和 bar 是否为假。我可以在 block 内再次检查这些条件,但感觉像是不必要的代码重复。 if (foo) {
我是一名优秀的程序员,十分优秀!