Pandas&python:根据包含子字符串的列值将数据帧拆分为多个数据帧

2024-10-01 11:39:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个可能包含数百万行的数据帧,如下所示:

df:
     name value
1     bob1   abc
2     bob3   def
3     jake2  ghi
4     jake   jkl 
5     sam1   mno
6     bob5   pqr

如何根据包含子字符串的name列值将其拆分为多个数据帧,例如本例中的“bob”、“jake”和“sam”?在

新的数据帧仍然可以保存在一个数据结构中,比如字典,如果这样做有任何改变的话。在

所需数据帧:

^{pr2}$

Tags: 数据namedfvaluedefjklabcmno
3条回答

另一种方法是:

获取所有不同的值:

def matching_function(x):
    match = re.match(r"([a-z]+)([0-9]+)", x, re.I)
    if match:
        return match.group(1)

函数从字符串中删除数字thanks for this answer 获取名称的所有可能值:

^{pr2}$

循环到这些值并拆分df:

df_list= []
for x in set(df.name.apply(matching_function)):
    if x :
        df_list.append(df.loc[df.name.apply(lambda y : y.startswith( x ))])

数据框列表包含拆分的数据帧

IIUC公司

l=[y for _,y in df.groupby(df.name.str.replace('\d+', ''))]
Out[207]: 
l
[   name value
 1  bob1   abc
 2  bob3   def
 6  bob5   pqr,     name value
 3  jake2   ghi
 4   jake   jkl,    name value
 5  sam1   mno]

这很管用。注意,我的字典键是名字,因为这似乎是最合乎逻辑的。在

# get set of names
names = set(df.name.str.replace('\d+', ''))

# make dictionary
dfs = {n: df[df.name.str.replace('\d+', '') == n] for n in names}

# {'jake':     name value
# 3  jake2   ghi
# 4   jake   jkl,
#  'bob':    name value
# 1  bob1   abc
# 2  bob3   def
# 6  bob5   pqr,
#  'sam':    name value
# 5  sam1   mno}

相关问题 更多 >