我必须非常简单地进行分组,但在我的情况下不起作用。我无法复制实际数据,但假设我的DF是:
Cod Cost Date VAL
0 A123 123 2017-12-21 0.0
1 A123 123 2017-12-21 -2.0
2 A123 123 2017-12-21 -10.0
3 FB00 180 2016-12-11 80.0
4 FB00 180 2016-12-11 80.0
我必须对Cod,Cost和Date进行分组,并使用reset_index()获得相应的VAL最小值。我的代码是:
DF = DF.groupby(['Cod', 'Cost','Date'])['VAL'].min().reset_index()
预期是:
Cod Cost Date VAL
0 A123 123 2017-12-21 -10.0
1 FB00 180 2016-12-11 80.0
但返回:
Cod Cost Date VAL
0 A123 123 2017-12-21 0.0
1 A123 123 2017-12-21 0.0
2 A123 123 2017-12-21 80.0
3 FB00 180 2016-12-11 80.0
4 FB00 180 2016-12-11 80.0
答案 0 :(得分:0)
我刚刚为您模拟了您的样本及其作品:
>>> df
Cod Cost Date VAL
0 A123 123 2017-12-21 0.0
1 A123 123 2017-12-21 -2.0
2 A123 123 2017-12-21 -10.0
3 FB00 180 2016-12-11 80.0
4 FB00 180 2016-12-11 80.0
>>> df.groupby(['Cod', 'Cost','Date'])['VAL'].min().reset_index() Cod Cost Date VAL
0 A123 123 2017-12-21 -10.0
1 FB00 180 2016-12-11 80.0
应用于熊猫:0.23.3
您还可以如下申请:
>>> df.groupby(['Cod', 'Cost','Date']).min().reset_index()
Cod Cost Date VAL
0 A123 123 2017-12-21 -10.0
1 FB00 180 2016-12-11 80.0
它也应与0.18.1
一起使用:
Python 3.5.1 (default, May 25 2016, 07:19:16)
[GCC 4.8.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> pd.__version__
'0.18.1'
样品
>>> df
Cod Cost Date VAL
0 A123 123 2017-12-21 0.0
1 A123 123 2017-12-21 -2.0
2 A123 123 2017-12-21 -10.0
3 FB00 180 2016-12-11 80.0
4 FB00 180 2016-12-11 80.0
>>> df.groupby(['Cod', 'Cost','Date']).min().reset_index()
Cod Cost Date VAL
0 A123 123 2017-12-21 -10.0
1 FB00 180 2016-12-11 80.0
OR
>>> df.groupby(['Cod', 'Cost','Date'])['VAL'].min().reset_index()
Cod Cost Date VAL
0 A123 123 2017-12-21 -10.0
1 FB00 180 2016-12-11 80.0
答案 1 :(得分:0)
就像这里的其他贡献者一样,您的代码可以为我带来预期的结果,但是由于情况并非如此,因此您可以让我提出另一个解决方案,尽管效率要低得多。
从复制数据框开始
$ProcessData = (Get-Counter '\Process(svchost*)\% Processor Time').Countersamples | Sort cookedvalue -Desc | Select-Object -First 1
$ProcessData.InstanceName
然后我们可以按照Cod,Cost,Date和VAL对值进行排序
const path = require("path");
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
loaders: ["style-loader", "css-loader", "sass-loader"],
include: path.resolve(__dirname, "../")
}
]
}
};
输出:
df = pd.DataFrame([['A123', 123, '2017-12-21', 0], ['A123', 123, '2017-12-21', -2], ['A123', 123, '2017-12-21', -10], ['FB00', 180, '2016-12-11', 80], ['FB00', 180, '2016-12-11', 80]], columns=['Cod', 'Cost', 'Date', 'VAL'])
然后我们可以删除重复的Cod,Cost和Dates,保留第一条记录(最低值),让我们获得您的预期输出。
df.sort_values(['Cod', 'Cost', 'Date', 'VAL'], ascending=True, inplace=True)
输出为:
Cod Cost Date VAL
2 A123 123 2017-12-21 -10
1 A123 123 2017-12-21 -2
0 A123 123 2017-12-21 0
3 FB00 180 2016-12-11 80
4 FB00 180 2016-12-11 80
非常hacky,不建议这样做,但是应该可以为您带来预期的结果。