python - Python:使用不同大小的数据框根据日期时间条件创建新列
问题描述
我在 Python 中有 2 个不同大小的数据框。较小的数据框有 2 个日期时间列,一个用于开始日期时间,一个用于结束日期时间。另一个数据框更大(更多的行和列)并且它有一个日期时间列。
自由度
Date_hour_beginning Date_hour_end
3/8/2019 18:35 3/8/2019 19:45
4/8/2019 14:22 4/8/2019 14:55
自由度乙
Date_hour compression
3/8/2019 18:37 41
3/8/2019 18:55 47
3/8/2019 19:30 55
3/8/2019 19:51 51
4/8/2019 14:10 53
4/8/2019 14:35 48
4/8/2019 14:51 51
4/8/2019 15:02 58
我想将压缩的平均值和幅度添加到覆盖日期时间范围的 df_A 。要得到以下结果:
df_A
Date_hour_beginning Date_hour_end mean_compression amplitude
3/8/2019 18:35 3/8/2019 19:45 47.66 14
4/8/2019 14:22 4/8/2019 14:55 49.5 3
我尝试了 np.where 和 groupby 但我不知道但我遇到了数据框形状不匹配的错误。
解决方案
# create test dataframes
df_A = pd.DataFrame(
{
"Date_hour_beginning": ["3/8/2019 18:35", "4/8/2019 14:22"],
"Date_hour_end": ["3/8/2019 19:45", "4/8/2019 14:55"],
}
)
df_B = pd.DataFrame(
{
"Date_hour": [
"3/8/2019 18:37",
"3/8/2019 18:55",
"3/8/2019 19:30",
"3/8/2019 19:51",
"4/8/2019 14:10",
"4/8/2019 14:35",
"4/8/2019 14:51",
"4/8/2019 15:02",
],
"compression": [41, 47, 55, 51, 53, 48, 51, 58],
}
)
# convert to datetime
df_A['Date_hour_beginning'] = pd.to_datetime(df_A['Date_hour_beginning'])
df_A['Date_hour_end'] = pd.to_datetime(df_A['Date_hour_end'])
df_B['Date_hour'] = pd.to_datetime(df_B['Date_hour'])
# accumulate compression values per range
df_A["compression"] = df_A.apply(
lambda row: df_B.loc[
(df_B["Date_hour"] >= row["Date_hour_beginning"])
& (df_B["Date_hour"] <= row["Date_hour_end"]),
"compression",
].values.tolist(),
axis=1,
)
# calculate mean compression and amplitude
df_A['mean_compression'] = df_A['compression'].apply(lambda x: sum(x) / len(x))
df_A['amplitude'] = df_A['compression'].apply(lambda x: max(x) - min(x))
推荐阅读
- reactjs - 问题 chrome 内容安全策略反应扩展清单
- c++ - 如何使用模板继承和组件
- c - 这里有什么问题?我没有连接我的字符串?
- java - 使用 Spring RestTemplate 将图像和 PDF 作为 Base64 字符串返回
- image - 从 blob 读取二进制数据以显示 Image React Native
- segue - 对新的视图控制器执行 Segue - 准备 segue 快速失败 5
- datepicker - 如何将页脚日期选择器移到日期选择器之外?
- node.js - 如何使用 pkg 在 Node.js 程序中获取程序的当前目录?
- database - 为什么位置透明度称为位置透明度?
- c# - 如何在 Xamarin 中同步从 GraphQL 获取的数据和 SQLite?