gpt4 book ai didi

python - 按ID分组,按时间排序,后除先

转载 作者:行者123 更新时间:2023-12-05 03:48:55 24 4
gpt4 key购买 nike

我有以下数据框:

ID  .....  Quantity     Time
54 100 2020-01-01 00:00:04
55 100 2020-01-01 00:00:04
54 88 2020-01-01-00:00:05
54 66 2020-01-01 00:00:06
55 100 2020-01-01 00:00:07
55 88 2020-01-01 00:00:07

我想按 ID 对数据帧(按时间排序!)进行分组,然后取最后一行的数量并将其除以每个 ID 的第一行。

结果应该是这样的:

ID  .....  Quantity     Time                     Result
54 100 2020-01-01 00:00:04
54 88 2020-01-01-00:00:05
54 66 2020-01-01 00:00:06 0.66
55 100 2020-01-01 00:00:04
55 100 2020-01-01 00:00:07
55 88 2020-01-01 00:00:07 0.88

到目前为止,我使用以下代码获取每个 ID 的第一行和最后一行。

g = df.sort_values(by=['Time']).groupby('ID')

df_new=(pd.concat([g.head(1), g.tail(1)])
.sort_values(by='ID')
.reset_index(drop=True))

然后我用下面的代码得到除法的结果:

df_new['Result'] = df_new['Quantity'].iloc[1::2].div(df_new['Quantity'].shift())

问题是:数据帧没有按时间排序。非常重要的是,我将(按时间)每个 ID 的最后数量除以每个 ID 的第一个(按时间)数量。

感谢您给我任何需要更改代码的提示!

最佳答案

没有成对的 ID 值,而是三元组,因此如有必要,请先将列转换为日期时间 to_datetime , 然后按 DataFrame.sort_values 每 2 列排序最后使用 previous answer 中的第二种或第三种解决方案:

df['Time'] = pd.to_datetime(df['Time'])
df = df.sort_values(['ID','Time'])

first = df.groupby('ID')['Quantity'].transform('first')
df['Result'] = df.drop_duplicates('ID', keep='last')['Quantity'].div(first)
print (df)

ID Quantity Time Result
0 54 100 2020-01-01 00:00:04 NaN
2 54 88 2020-01-01 00:00:05 NaN
3 54 66 2020-01-01 00:00:06 0.66
1 55 100 2020-01-01 00:00:04 NaN
4 55 100 2020-01-01 00:00:07 NaN
5 55 88 2020-01-01 00:00:07 0.88

关于python - 按ID分组,按时间排序,后除先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64171407/

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