使用循环或 lambda 在多个数据框中添加具有相同字符串值的列的更有效方法?

Blu*_*ail 6 python lambda loops python-3.x pandas

我想在我的 8 个类似数据框中的每一个中添加一个新列 Category。此列中的值相同,它们也是 df 名称,如df1_p8本例中所示。我用过了:

In:     df61_p8.insert(3,"Category","df61_p8", True)
# or simply, df61_p8['Category']='df61_p8'

Out:
        code    violation_description                                            Category
89491   9-1-503 Defective or obstructed duct system one- building                df61_p8
102045  9-1-503 Defective or obstructed duct system one- building                df61_p8
103369  9-1-503 Defective or obstructed duct system one- building                df61_p8
130440  9-1-502 Failure to maintain at least one (1) elevator                    df61_p8
132446  9-1-503 Defective or obstructed duct system one-  building               df61_p8
Run Code Online (Sandbox Code Playgroud)

最终,我想将这 8 个数据帧附加/连接到一个数据帧中。

我想知道是否有更有效的方法来做到这一点,而不是在每个数据帧上一一使用 .insert 。像循环或 lambdas 之类的东西..作为初学者,我不确定如何在我的情况下应用它们?谢谢你。

append_alldfs = []
x=[df61_p1,df61_p2,df61_p3,df61_p4,df61_p5,df61_p6,df61_p7,df61_p8]
lambdafunc = lambda x: x.insert(3,"Category","x",True)
Run Code Online (Sandbox Code Playgroud)

小智 2

保持简单和明确。

for col_val, df in [
   ('df61_p1', df61_p1),
   ('df61_p2', df61_p2),
   ('df61_p3', df61_p3),
   ('df61_p4', df61_p4),
   ('df61_p5', df61_p5),
   ('df61_p6', df61_p6),
   ('df61_p7', df61_p7),
   ('df61_p8', df61_p8),
]:
    df['Category'] = col_val
Run Code Online (Sandbox Code Playgroud)

虽然肯定有更多的“元编程”方法可以完成相同的任务,但这些方法通常非常复杂,并且难以理解和重构。

然而,考虑到这段代码的结构,我想在你到达这一点之前,你可以通过一些方法来解决这个问题。

例如,这些数据帧在什么时候被分割?也许从一开始就不使用单独的数据帧[将原始数据帧放在一起/在开始时连接](并根据需要使用 apply、groupby、pivot 和melt 操作),您可以完全避免此问题。