我有一个dataframe
不同的列nombre
,,,,cantidad
。batería
它可以具有类似于以下的形式。
data = [['dev1', 20, '65'],
['dev1', 4, '99'],
['dev2', 22, '67'],
['dev1', 6, '99'],
['dev3', 20, '85']
['dev3', 35, '33']
]
columnas = ['nombre', 'cantidad', 'bateria']
df = pd.DataFrame(data, columns=columnas)
我想要的是获得每个元素的最终值,在这种情况下通过它的名称来识别。也就是说,对于上面的示例,我需要一个输出。
lista= [[dev2,22,67],[dev1,6,99],[dev3,35,33]]
因此我这样做:
# Obtengo los diferentes elementos que contiene la columna nombre
elems = list(set(df['nombre']))
# Últimos valores de cada nodo
lista, values = [], []
for el in elems:
ndf = df.loc[df['Node name'] == el]
values.append(ndf['nombre'].iloc[-1])
values.append(ndf['cantidad'].iloc[-1])
values.append(ndf['bateria'].iloc[-1])
lista.append(values)
但留给我的是['dev2',22,67,'dev1',6,99,'dev3',35,33]
如何让它保持另一种方式?
是否有更有效的方法来执行此数据获取过程?我想它pandas
可以让我们做得更快更好。
谢谢!
groupby()
您可以像这样使用and方法tail()
:.values.tolist()
如果作为 DataFrame 的结果对您不起作用,则会获得添加列表(由 @abulafia 建议):编辑:虽然这是功能性的,但最后我实现了@gustavovelascoh 的回答和@abulafia 的建议。更短,更简单的预期结果。
最后,我的解决方案是初始化
values
循环内的列表,以便在每次迭代时重置。