【问题标题】:Keep the last n real values of uneven rows in a dataframe?保留数据框中不均匀行的最后 n 个实际值?
【发布时间】:2021-10-08 23:52:09
【问题描述】:

我正在收集一段时间内的心率值。每个受试者收集数据的时间长度各不相同。我想制作一个最后 2 秒收集数据的表格。

import pandas as pd 
import numpy as np

#example data
example_s = [["4/20/21 4:20", 302, 0, 0, 1, 2, 3],
       ["2/17/21 9:20",135, 1, 1.4, 8, 10, np.NaN, np.NaN],
       ["2/17/21 9:20", 111, 5, 5,1, np.NaN, np.NaN,np.NaN, np.NaN]]
example_s_table = pd.DataFrame(example_s,columns=['Date_Time','CID', 0, 1, 2, 3, 4, 5, 6])


desired_outcome = [["4/20/21 4:20",302,1, 2, 3],
       ["2/17/21 9:20",135, 1.4, 8, 10 ],
       ["2/17/21 9:20",111, 5, 5,1 ]]

desired_outcome_table = pd.DataFrame(desired_outcome,columns=['Date_Time','CID', "Second 1", "Second 2", "Second 3"])

我可以从此处显示的示例中了解如何收集数据的单个实例,但想知道如何快速将多个值添加到我的表中:

desired_outcome_table["Last Second"]=example_s_table.iloc[:,1:].ffill(axis=1).iloc[:, -1]

Python Dataframe Get Value of Last Non Null Column for Each Row

【问题讨论】:

  • 你能解释一下如何选择这些值的逻辑吗?
  • 数据从何而来?我看到太多人试图执行笨拙的 pandas 转换,在转换为数据帧之前,这些转换在原始数据上执行起来会容易得多。
  • 原始数据是许多输出文件的集合。由于我是从我编写的代码中处理它的,因此它位于与问题类似格式的 excel 文件中。尴尬,是的,但这就是我所拥有的一切,因为我正在努力学习如何在飞行中做到这一点!

标签: python pandas numpy rows nan


【解决方案1】:

试试:

df = example_s_table.copy()
df = df.set_index(['Date_Time', 'CID'])

df_out = df.mask(df.eq(0))\
           .apply(lambda x: pd.Series(x.dropna().tail(3).values), axis=1)\
           .rename(columns = lambda x: f'Second {x+1}')
df_out['Last Second'] = df_out['Second 3']
print(df_out.reset_index())

输出:

      Date_Time  CID  Second 1  Second 2  Second 3  Last Second
0  4/20/21 4:20  302       1.0       2.0       3.0          3.0
1  2/17/21 9:20  135       1.4       8.0      10.0         10.0
2  2/17/21 9:20  111       5.0       5.0       1.0          1.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2022-09-29
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2019-09-10
    • 2021-08-17
    相关资源
    最近更新 更多