我有一个Pandas数据帧,对于如何做我希望做的事情有点不知所措。这是数据帧的一个片段,我也在上传一个屏幕截图。实际上,我想创建一个定义为音高的新列,其中count为"3-2"。
要做到这一点,我想循环浏览所有行。对于给定的行(我将其称为原始行(,如果prev_count == '3--2'
,则我希望
- 将数据帧行逐步减少到
prev_count != '3--2'
所在的位置 - 确认该行具有与原始行相同的
batter-pitcher
标识符 - 在满足条件
prev_count != '3--2'
ANDbatter-pitcher
(原始行(==batter-pitcher
(新行(的行中,我想提取新行的pitch_number
- 则将使用以下公式来计算原始行中的新列的值:
pitch_number
(原始行(+1-pitch_number
(新行(
要使用现有的数据帧作为示例。。。索引62、4186、87和252对于新列将具有值1。指数171的值为3;177值为2;以及192为值1。同样,191的值为5;229、10和57对于这个新的列变量也将具有值1。
player_name batter-pitcher pitch_number count prev_count
62 Graveman, Kendall 501303---608665 6 3--2 3--1
4 Smyly, Drew 608665---592767 6 3--2 2--2
186 Graveman, Kendall 592696---608665 8 3--2 2--2
87 Maton, Phil 621020---664208 6 3--2 3--1
252 Martin, Chris 514888---455119 6 3--2 2--2
171 Urquidy, José 624585---664353 8 3--2 3--2
177 Urquidy, José 624585---664353 7 3--2 3--2
192 Urquidy, José 624585---664353 6 3--2 3--1
191 García, Yimi 594807---554340 12 3--2 3--2
198 García, Yimi 594807---554340 11 3--2 3--2
209 García, Yimi 594807---554340 10 3--2 3--2
219 García, Yimi 594807---554340 9 3--2 3--2
229 García, Yimi 594807---554340 8 3--2 2--2
10 Valdez, Framber 592696---664285 6 3--2 2--2
57 Valdez, Framber 518692---664285 6 3--2 2--2
我有点不知所措,不知道如何1(循环通过数据帧上的行,然后2(在循环的每个块中,逐步减少行,3(在另一行中引用数据帧中的其他列,所以非常感谢这里的指导。非常感谢!
对于给定的数据集,我认为这是可行的。但它假设你的投球次数总是增加一,并且你没有丢失任何数据,否则这将不起作用。我建议研究投手击球手上的cumcount((、cummax((和cummin((分组。
列"new1"是最终答案,列"new"只是一个中间步骤。
# get dataframe into right order
df.sort_values(by=['batter-pitcher', 'pitch_number'], ascending=[True, False], inplace=True)
df['new'] = df.groupby(['batter-pitcher', 'prev_count'])['count'].cumcount(ascending=False) + 1
df['new1'] = np.where((df['new']==1) & (df['prev_count']!='3--2'), 1, df['new']+1)
player_name batter-pitcher pitch_number count prev_count new new1
62 Graveman, Kendall 501303---608665 6 3--2 3--1 1 1
4 Smyly, Drew 608665---592767 6 3--2 2--2 1 1
186 Graveman, Kendall 592696---608665 8 3--2 2--2 1 1
87 Maton, Phil 621020---664208 6 3--2 3--1 1 1
252 Martin, Chris 514888---455119 6 3--2 2--2 1 1
171 Urquidy, José 624585---664353 8 3--2 3--2 2 3
177 Urquidy, José 624585---664353 7 3--2 3--2 1 2
192 Urquidy, José 624585---664353 6 3--2 3--1 1 1
191 García, Yimi 594807---554340 12 3--2 3--2 4 5
198 García, Yimi 594807---554340 11 3--2 3--2 3 4
209 García, Yimi 594807---554340 10 3--2 3--2 2 3
219 García, Yimi 594807---554340 9 3--2 3--2 1 2
229 García, Yimi 594807---554340 8 3--2 2--2 1 1
10 Valdez, Framber 592696---664285 6 3--2 2--2 1 1
57 Valdez, Framber 518692---664285 6 3--2 2--2 1 1