J_A*_*hur 1 python for-loop pandas
我有一个DataFrame,必须在三个级别上分组,然后返回最高值.每天都有每个独特价值的回报,我想找到最高的回报和细节.
data.groupby(['Company','Product','Industry'])['ROI'].idxmax()
Run Code Online (Sandbox Code Playgroud)
回报表明:
Target - Dish Soap - House had a 5% ROI on 9/17
Best Buy - CDs - Electronics had a 3% ROI on 9/3
Run Code Online (Sandbox Code Playgroud)
是最高的.
这是一些示例数据:
+----------+-----------+-------------+---------+-----+
| Industry | Product | Industry | Date | ROI |
+----------+-----------+-------------+---------+-----+
| Target | Dish Soap | House | 9/17/13 | 5% |
| Target | Dish Soap | House | 9/16/13 | 2% |
| BestBuy | CDs | Electronics | 9/1/13 | 1% |
| BestBuy | CDs | Electroincs | 9/3/13 | 3% |
| ...
Run Code Online (Sandbox Code Playgroud)
不确定这是否是for循环,或使用.ix.
我想,如果我理解正确,你可以使用groupby和收集系列中的索引值idxmax(),然后选择df使用的那些行loc:
idx = data.groupby(['Company','Product','Industry'])['ROI'].idxmax()
data.loc[idx]
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用reindex:
data.reindex(idx)
Run Code Online (Sandbox Code Playgroud)
在一个(不同的)数据帧上,我碰巧有用,看起来reindex可能是更快的选择:
In [39]: %timeit df.reindex(idx)
10000 loops, best of 3: 121 us per loop
In [40]: %timeit df.loc[idx]
10000 loops, best of 3: 147 us per loop
Run Code Online (Sandbox Code Playgroud)