我有一个有1000行的熊猫数据框。它的Names
列包含客户名称及其记录。我想根据每个客户的唯一名称为他们创建单独的数据帧。我把唯一的名字列在一张单子上
customerNames = DataFrame['customer name'].unique().tolist()
这给出了以下数组
['Name1', 'Name2', 'Name3, 'Name4']
我尝试了一个循环,捕捉上面列表中的唯一名称,为每个名称创建数据帧,并将数据帧分配给客户名称。例如,当我写Name3
时,它应该将Name3
的数据作为单独的数据帧
for x in customerNames:
x = DataFrame.loc[DataFrame['customer name'] == x]
x
上面的行只返回了作为dataframe结果的Name4
的dataframe,但跳过了其余行。
我怎样才能解决这个问题?
要为列中的所有唯一值创建数据帧,请创建数据帧的
dict
,如下所示。dict
,其中每个键是所选列中的唯一值,值是一个数据帧。df_names['Name1']
)k
是列中的唯一值,v
是与每个k
关联的数据。使用
for-loop
和.groupby
:用Python Dictionary Comprehension
使用
.groupby
.groupby
比.unique
更快。.groupby
在104 ms时比392 ms时更快.groupby
的速度更快,在147ms时比在1.53s时快for-loop
稍快于理解,特别是对于更独特的列值或许多行(例如10M)。使用
.unique
:测试
也许我错了,但是
当
为最后一个列表项提供正确的输出,因为输出超出了循环的缩进
你得到输出:
或者如果你不喜欢环,你可以用
输出:
df.isin最好在下面解释:How to implement 'in' and 'not in' for Pandas dataframe
当前迭代每次运行时都会覆盖
x
两次:循环for
为x
分配一个客户名称,然后为其分配一个数据帧。要以后按名称调用每个数据帧,请尝试将它们存储在字典中:
相关问题 更多 >
编程相关推荐