我正在努力解决以下问题:
我如何总结一个timedeltas列表,如:
[datetime.timedelta(0, 3600), datetime.timedelta(0, 3600), datetime.timedelta(0, 7200)]
Run Code Online (Sandbox Code Playgroud)
这应该导致datetime.timedelta(0,14400) => 4小时
我在按时间范围和按列的不同计算对熊猫 df 进行分组时遇到了麻烦:
让我们采用以下 df:
date identifier value_1 value_2
0 05.07.2018 16:35 A 10 0
1 05.07.2018 16:36 B 20 1
2 05.07.2018 16:37 A 20 2
3 05.07.2018 16:39 B 30 1
4 05.07.2018 16:40 A 40 3
5 05.07.2018 16:41 B 20 2
6 05.07.2018 16:41 A 30 1
7 05.07.2018 16:42 B 50 2
8 05.07.2018 16:43 B 20 3
9 05.07.2018 16:44 A 20 1
Run Code Online (Sandbox Code Playgroud)
因此,我需要一个 df,它按 5 分钟间隔的时间和标识符分组,具有 value_1 的平均值和 value_2 的总和:
date identifier value_1 …Run Code Online (Sandbox Code Playgroud) 假设我们有两个数据帧,我们想要将它们与左反连接进行比较:
data1 = [
(1, 11, 20, None),
(2, 12, 22, 31),
]
data2 = [
(1, 11, 20, None),
(2, 12, 22, 31),
]
schema = StructType([ \
StructField("value_1",IntegerType(), True), \
StructField("value_2",IntegerType(), True), \
StructField("value_3",IntegerType(), True), \
StructField("value_4",IntegerType(), True), \
])
df1 = spark.createDataFrame(data=data1,schema=schema)
df2 = spark.createDataFrame(data=data2,schema=schema)
Run Code Online (Sandbox Code Playgroud)
如何通过多个(所有)列 nullsafe 连接这些数据帧?我想出的唯一解决方案如下:
df = df1.join(df2, \
((df1.value_1.eqNullSafe(df2.value_1)) &
(df1.value_2.eqNullSafe(df2.value_2)) &
(df1.value_3.eqNullSafe(df2.value_3)) &
(df1.value_4.eqNullSafe(df2.value_4))),
"leftanti" \
)
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我们现在必须处理大量列的动态列表。我们如何以某种方式重写此连接,以便我们可以提供要连接的列的列表。
感谢和BR