Pandas 基于$symbol将熊猫中的行拆分为多行
我知道这个问题已经被问了很多次了,但在把它标记为重复之前,我发现的答案似乎都不起作用。我有一个如下形式的数据框:Pandas 基于$symbol将熊猫中的行拆分为多行,pandas,dataframe,pandas-groupby,Pandas,Dataframe,Pandas Groupby,我知道这个问题已经被问了很多次了,但在把它标记为重复之前,我发现的答案似乎都不起作用。我有一个如下形式的数据框: category | description ------------------------------ puppy dog$pup crappy cat$pet squeeky animal fluffy dog$pet 我
category | description
------------------------------
puppy dog$pup
crappy cat$pet
squeeky animal
fluffy dog$pet
我想通过$
符号将description
列拆分为多行,并获得如下内容:
category | description
------------------------------
puppy dog
puppy pup
crappy cat
crappy pet
squeeky animal
fluffy dog
fluffy pet
很抱歉这个愚蠢的例子,但我希望它能说明问题所在。我最后尝试的是:
new_df = pd.concat([pd.Series(row['category'], row['description'].split('$'))
for _, row in old_df.iterrows()]).reset_index()
但这带来了一个:
AttributeError: 'float' object has no attribute 'split'.
我认为缺少值会有问题,因此更好的方法是使用,然后对于新行(适用于0.25+):
我认为缺少值会有问题,因此更好的方法是使用,然后对于新行(适用于0.25+):
对于pandas 0.25之前的答案,这里的一种方法是使用
apply
将一列拆分为两列,然后使用melt
将数据重新组织到所需的结构中
import pandas as pd
data = [{ "category": "puppy", "description": "dog$pup"},
{ "category": "crappy", "description": "cat$pet"},
{ "category": "squeeky", "description": "animal"},
{ "category": "fluffy", "description": "dog$pet"},
]
data_df = pd.DataFrame(data)
data_df["one"], data_df["two"] = zip(*[r[0:2] for r in data_df['description'].apply(lambda x: x.split("$")+ [None] ) ])
data_df[['category','one','two']].melt(id_vars="category")[['category','variable']].sort_values(by=["category", "variable"])
对于0.25之前的答案,这里的一种方法是应用
将一列拆分为两列,然后使用熔化将数据重新组织到所需的结构中
import pandas as pd
data = [{ "category": "puppy", "description": "dog$pup"},
{ "category": "crappy", "description": "cat$pet"},
{ "category": "squeeky", "description": "animal"},
{ "category": "fluffy", "description": "dog$pet"},
]
data_df = pd.DataFrame(data)
data_df["one"], data_df["two"] = zip(*[r[0:2] for r in data_df['description'].apply(lambda x: x.split("$")+ [None] ) ])
data_df[['category','one','two']].melt(id_vars="category")[['category','variable']].sort_values(by=["category", "variable"])