在pandas apply函数中获取行索引与列名格式化单元格值的方法
实现方案
你可以在按行apply的逻辑中,调用行Series的items()方法遍历列名与对应单元格值,实现需求,示例代码如下:
import pandas as pd df = pd.DataFrame({ 'X': [1,2,3,4,5], 'Y': [3,4,5,6,7], 'Z': [5,6,7,8,9]}, index=['a', 'b', 'c', 'd', 'e']) # apply实现逻辑 result = df.apply( lambda row: pd.Series( [f"({row.name}, {col}), {val}" for col, val in row.items()], index=row.index ), axis=1 ) print(result)
运行后输出和你预期完全一致:
X Y Z a (a, X), 1 (a, Y), 3 (a, Z), 5 b (b, X), 2 (b, Y), 4 (b, Z), 6 c (c, X), 3 (c, Y), 5 (c, Z), 7 d (d, X), 4 (d, Y), 6 (d, Z), 8 e (e, X), 5 (e, Y), 7 (e, Z), 9
如果不需要字符串格式,要保留元组结构的话,把列表推导式的内容替换为((row.name, col), val)即可:
result = df.apply( lambda row: pd.Series( [((row.name, col), val) for col, val in row.items()], index=row.index ), axis=1 )
逻辑说明
- 按行apply时传入的
row是代表单行数据的Series对象,row.name属性为当前行的索引值 row.items()会迭代返回当前行所有(列名, 单元格值)的键值对,直接就能拿到你需要的对应单元格的列名- 最后将生成的列表转为Series并指定与原行一致的索引,即可保留原DataFrame的列结构。
内容的提问来源于stack exchange,提问作者Toto Lele
相关产品推荐
相关产品推荐

