机器提供熊猫数据帧中提供的故障代码。id识别机器,code是故障代码:
df = pd.DataFrame({
"id": [1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,4],
"code": [1,2,5,8,9,2,3,5,6,1,2,3,4,5,6,7],
})
Run Code Online (Sandbox Code Playgroud)
阅读示例:机器 1 生成了 5 个代码:1、2、5、8 和 9。
我想找出所有机器上最常见的代码组合。该示例的结果将类似于[2](3x)、[2,5](3x)、[3,5](2x) 等。
我怎样才能做到这一点?由于有大量数据,我正在寻找有效的解决方案。
以下是表示数据的另外两种方法(以防计算更容易):
pd.crosstab(df.id, df.code)
Run Code Online (Sandbox Code Playgroud)
df.groupby("id")["code"].apply(list)
Run Code Online (Sandbox Code Playgroud)
使用 python pandas 包我运行
pd.to_datetime("23.01.2019 06:50:59")
Run Code Online (Sandbox Code Playgroud)
并得到预期结果
Timestamp('2019-01-23 06:50:59')
Run Code Online (Sandbox Code Playgroud)
然而,运行时
pd.to_datetime("11.01.2019 18:34:39")
Run Code Online (Sandbox Code Playgroud)
日和月混淆了,我得到
Timestamp('2019-11-01 18:34:39')
Run Code Online (Sandbox Code Playgroud)
预期是:Timestamp('2019-01-11 18:34:39')
关于为什么会发生这种情况以及如何避免这种情况有什么想法吗?谢谢!
我有以下数据框:
df = pd.DataFrame(
{
"group": [1,1,1,2,2],
"type": ["initial", "update", "update", "initial", "update"],
"update time": ["2019-01-01 12:00:00", "2019-01-03 12:00:00", "2019-01-05 12:00:00", "2019-01-02 12:00:00", "2019-01-04 12:00:00"],
"finish time": ["2019-01-07 12:00:00", "2019-01-07 12:00:00", "2019-01-08 12:00:00", "2019-01-05 12:00:00", "2019-01-05 12:00:00"]
}
)
df["update time"] = pd.to_datetime(df["update time"])
df["finish time"] = pd.to_datetime(df["finish time"])
df
Run Code Online (Sandbox Code Playgroud)
对于每一行,我想计算每个“组”的“初始”行的“完成时间”和“更新时间”之间的差。如示例中所示,“结束时间”可以更改。
所需的输出是:
我想这groupby是一个很好的起点,但是我无法弄清楚整个解决方案。有任何想法吗?
非常感谢!