我想在按名称分组时获取最后一行的值。例如,在第2行中Walter这个名字的最后一次迭代中,我想得到Dog+“,”+猫代表Col1,啤酒+“,”+葡萄酒代表Col3。有很多列,所以我想让它基于索引/列位置,而不是列名
+------+---------+-------+
| Col1 | Name | Col3 |
+------+---------+-------+
| Dog | Walter | Beer |
| Cat | Walter | Wine |
| Dog | Alfonso | Cider |
| Dog | Alfonso | Cider |
| Dog | Alfonso | Vodka |
+------+---------+-------+
这是我想要的输出:
+---------------+---------------------------+---------------------+
| Col1 | Name | Col3 |
+---------------+---------------------------+---------------------+
| Dog | Walter | Beer |
| Dog, Cat | Walter, Walter | Beer, Wine |
| Dog | Alfonso | Cider |
| Dog, Dog | Alfonso, Alfonso | Cider, Cider |
| Dog, Dog, Dog | Alfonso, Alfonso, Alfosno | Cider, Cider, Vodka |
+---------------+---------------------------+---------------------+
这是我尝试过的(但不起作用):
for i in df:
if df.loc[i,1] == df.loc[i+1,1]:
df.loc[i,0] + ", " + df.loc[i+1,0]
else:
df.loc[i+1,0]
我读到不赞成使用for循环在pandas中的行上迭代,因此我希望通过使用矢量化或apply(或其他有效的方法)获得输出
下面是在索引上使用
accumulate
和使用df.agg
方法的另一种方法:您可以在最后添加一个带有
drop=True
的重置索引来重置索引您可以使用
groupby
和cumsum
。如果您不介意(取决于您在之后的使用)在末尾添加一个额外的逗号/空格,您可以执行以下操作:但是,如果要删除额外的逗号/空格,只需在每列中添加str[:-2],如下所示:
基本上,您要做的是在每个组上运行一个交换聚合函数。Pandas有
comsum
用于常规加法,但不支持自定义交换函数。为此,您可能需要使用一些numpy函数:结果如下:
相关问题 更多 >
编程相关推荐