我正在浏览我从PACKT购买的视频包,以学习熊猫。作者使用jijna2 style()突出显示了每一列中的最大值。我很快发现我无法在PyCharm中使用该技术。所以我决定提取这些值。
我想做的是通过从具有N列的数据框中提取行索引,列名和最大列值来创建三列数据框,然后创建新的数据框。新的数据框将显示每一行(如果有联系,则显示所有适当的行),列和该列中的最大值。
我创建了一个玩具数据框只是为了通过代码工作。
我的代码在下面,在输出的最下面,实际上是我希望新数据框的外观。
我知道我正在使用打印声明。到目前为止,该代码是我唯一使用过的东西,如果我有领带,它可以正确拾取多行。
我抓住了整行,我不想。我也不确定如何从提取的数据中构造建议的新数据框。
ERROR in src/app/character.service.ts(27,20): error TS2538: Type 'string[]' cannot be used as an index type.
答案 0 :(得分:3)
您可以使用.where
并用mask
等于a
的无m stack
x值,然后用df.where(df.eq(df.max())).stack().sort_index(level=1).reset_index()
Rows animals 0
0 row_3 dogs 86.0
1 row_9 dogs 86.0
2 row_4 cats 80.0
3 row_8 sheep 89.0
4 row_6 lizards 88.0
5 row_7 lizards 88.0
6 row_1 birds 82.0
来检查
data_source
答案 1 :(得分:1)
将numpy.where
用于匹配的max
的索引,并通过建立索引来创建新的DataFrame
-如果性能在大型DataFrame
中很重要,则更好:
c, r = np.where(df.eq(df.max()).T)
df = pd.DataFrame({'idx':df.index[r], 'cols':df.columns[c], 'vals': df.values[r, c]})
print(df)
idx cols vals
0 row_3 dogs 86
1 row_9 dogs 86
2 row_4 cats 80
3 row_8 sheep 89
4 row_6 lizards 88
5 row_7 lizards 88
6 row_1 birds 82
另一个DataFrame.unstack
和GroupBy.transform
的熊猫解决方案,用于通过第一级比较每组的max
值:
s = df.unstack()
df = s[s.groupby(level=0).transform('max').eq(s)].reset_index(name='vals')
print(df)
animals Rows vals
0 dogs row_3 86
1 dogs row_9 86
2 cats row_4 80
3 sheep row_8 89
4 lizards row_6 88
5 lizards row_7 88
6 birds row_1 82