【问题标题】:How to add first and second row of each pair of rows in dataframe to separate list?如何将数据框中每对行的第一行和第二行添加到单独的列表中?
【发布时间】:2020-11-12 13:26:14
【问题描述】:

所以我有一个如下所示的数据框:

在每对行中,例如 0&1、2&3、4&5、6&7 等,我想将每一行添加到单独的列表中。每个数字都是一个时间,然后我正在做 a-b 来计算反应时间。如何做到这一点?

Index      Time
0          70
1          75.3
2          76 
3          79.7
4          82 
5          84.2

我可以使用以下代码完成下一部分:

reaction_times = []
for i in list(zip(a,b)):
    rt = b-a
    reaction_times.append(rt)

谢谢!

编辑:我想要的输出本质上是一个反应时间列表(a 是第一个值,b 是每对时间的第二个值(每个都指试验的开始和结束))。但是,如果有办法做到:[(75.3-70)、(79.7-76)、(84.2-82)] 等等,这也将不胜感激!

【问题讨论】:

  • 您介意提供完整的mcve 吗?您正在寻找什么输出? ab 是什么?
  • 我不明白你想要什么。我知道你想成对分组。这可以通过df.groupby(np.arange(len(df)) // 2) 来完成。在那之后我只是没有得到你想要的。尝试提供您预期的结果。
  • 嗨!我添加了一个编辑来解释最终结果应该是什么,很抱歉之前没有包含它!

标签: python pandas list loops dataframe


【解决方案1】:

如果要从第一个值中减去第二个值,可以使用以下代码。

dfgrouped = df.groupby(np.arange(len(df))//2)

dfgrouped.last()-dfgrouped.first()

【讨论】:

  • 复制并粘贴@pIRSquared 的评论?皱眉:(
  • 不是发生了什么
  • 好吧,那很好。它确实经常发生,所以我很高兴你没有:) 为“指责”道歉。祝你有美好的一天!
【解决方案2】:

这是找出oddeven 数据点之间差异的一种方法。

df.Time[1::2].reset_index(drop=True) - df.Time[0::2].reset_index(drop=True)

输出

0    5.3
1    3.7
2    2.2

【讨论】:

    【解决方案3】:

    rolling() 方法。

    df.Time.rolling(2).apply(lambda x : x[1] - x[0],raw=True)[1:].tolist()
    

    输出

    [5.299999999999997,
     0.7000000000000028,
     3.700000000000003,
     2.299999999999997,
     2.200000000000003]
    

    【讨论】:

      猜你喜欢
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2011-06-24
      相关资源
      最近更新 更多