如何在另外两列上创建pandas数据帧列循环



我有一个Pandas数据帧,对于如何做我希望做的事情有点不知所措。这是数据帧的一个片段,我也在上传一个屏幕截图。实际上,我想创建一个定义为音高的新列,其中count为"3-2"。

要做到这一点,我想循环浏览所有行。对于给定的行(我将其称为原始行(,如果prev_count == '3--2',则我希望

  1. 将数据帧行逐步减少到prev_count != '3--2'所在的位置
  2. 确认该行具有与原始行相同的batter-pitcher标识符
  3. 在满足条件prev_count != '3--2'ANDbatter-pitcher(原始行(==batter-pitcher(新行(的行中,我想提取新行的pitch_number
  4. 则将使用以下公式来计算原始行中的新列的值:

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

相关内容

  • 没有找到相关文章

最新更新