gpt4 book ai didi

python - 转换 DataFrame 中的每个组

转载 作者:行者123 更新时间:2023-12-04 08:08:01 24 4
gpt4 key购买 nike

我有以下数据帧:

  id   x    y        timestamp  sensorTime
1 32 30 1031 2002
1 4 105 1035 2005
1 8 110 1050 2006
2 18 10 1500 3600
2 40 20 1550 3610
2 80 10 1450 3620
....


import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[1,1,1,2,2,2], [32,4,8,18,40,80], [30,105,110,10,20,10], [1031,1035,1050,1500,1550,1450], [2002, 2005, 2006, 3600, 3610, 3620]])).T
df.columns = ['id', 'x', 'y', 'timestamp', 'sensorTime]
对于按 id 分组的每个组我想补充 sensorTime的不同之处到 timestamp 的第一个值.类似于以下内容:
start = df.iloc[0]['timestamp']
df['sensorTime'] -= df.iloc[0]['sensorTime']
df['sensorTime'] += start
但我想为每个 id 做这件事分别分组。
生成的 DataFrame 应该是:
  id   x    y        timestamp  sensorTime
1 32 30 1031 1031
1 4 105 1035 1034
1 8 110 1050 1035
2 18 10 1500 1500
2 40 20 1550 1510
2 80 10 1450 1520
....
每个组如何完成此操作?

最佳答案

df

id x y timestamp sensorTime
0 1 32 30 1031 2002
1 1 4 105 1035 2005
2 1 8 110 1050 2006
3 2 18 10 1500 3600
4 2 40 20 1550 3610
5 2 80 10 1450 3620
您可以按 id 分组然后通过两个 timestampsensorTime .那么你可以使用 diff得到 sensorTime的差值.第一个值是 NaN您可以将其替换为 timestamp 的第一个值那个组的。然后你可以简单地做 cumsum以获得所需的输出。
def func(x):
diff = x['sensorTime'].diff()
diff.iloc[0] = x['timestamp'].iloc[0]
return (diff.cumsum().to_frame())

df['sensorTime'] = df.groupby('id')[['timestamp', 'sensorTime']].apply(func)
df
id x y timestamp sensorTime
0 1 32 30 1031 1031.0
1 1 4 105 1035 1034.0
2 1 8 110 1050 1035.0
3 2 18 10 1500 1500.0
4 2 40 20 1550 1510.0
5 2 80 10 1450 1520.0

关于python - 转换 DataFrame 中的每个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66126080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com