【发布时间】:2020-06-25 09:21:47
【问题描述】:
在 powerBI 中,我可以导入表单记录表。 该表单来自 Web 应用程序,每次更新表单时,都会在表格中添加一个新行。每个表单都有一个唯一的标识符。 因此,该表对于每个唯一标识符都有多行,并且对于每个更新都有一个日期戳。
在 powerBI 中使用 group by 我可以在日期戳上使用 min() 或 max() 过滤每个唯一标识符的第一条或最后一条记录上的表。 但是我想过滤每个唯一标识符的第二个日期戳。
我无法弄清楚如何在 powerBI 中执行此操作,因此我认为使用 python 脚本导入将是解决方案,并且在卡住之前完成了一半。
到目前为止,我的过程是:使用 pandas,从表中创建一个数据框,通过唯一标识符对表进行分组,并在选择第二条记录的日期列上使用 lambda 函数。
import pandas as pd
df=pd.read_excel (r'C:\..\form_records.xlsx')
df=df.groupby('ID')['datestamp'].apply(lambda x: x.nsmallest(2).max())
print(df)
在 jupyter 中,这会在没有标题的列中输出 ID 列和每个 ID 旁边的正确日期戳。像这样:
ID
REC0162259 2020-06-24 07:43:05
REC0162260 2020-06-24 07:44:00
REC0162261 2020-06-24 09:41:05
REC0162262 2020-06-24 08:13:29
REC0162263 2020-06-24 09:40:24
...
REC0162409 2020-06-24 16:23:30
Name: datestamp, Length: 149, dtype: datetime64[ns]
这看起来很有希望,但是当我在 powerBI 中使用脚本作为数据源时,没有数据表存在:
DAX:
let
Source = Python.Execute("import pandas as pd#(lf)df=pd.read_excel (r'r'C:\..\form_records.xlsx'')#(lf)df=df.groupby('ID')['datestamp'].apply(lambda x: x.nsmallest(2).max())#(lf)print(df)"),
df1 = Source{[Name="df"]}[Value]
in
df1
我不知道如何将新的分组数据转换为 python 中的表以便可以导入。如果我不按步骤进行分组,原始数据将完美导入,就像我进行了 powerBI excel 导入一样。
请注意,原始数据包含除 ID 和日期戳之外的其他列,但我不一定需要这些列来进行分析。
【问题讨论】:
标签: python pandas import powerbi pandas-groupby