Mee*_*eep 2 python dataframe pandas
假设我有以下数据框:
df = pd.DataFrame({'name':['a', 'b', 'c','d','e'], 'description':['vim2tests','vim2trial','vim3tests','vim3zip', 'vim4trial'], 'count':[4,5,6,7,8]})
Run Code Online (Sandbox Code Playgroud)
我试图分成 3 个数据帧,其中包含 'description' 条目包含 'vim2'、'vim3'、'vim4' 子字符串的行。
有没有一种有效的方法来做到这一点?我可以实现一个 for 循环来查找我想要的行的索引,但这根本没有效率,我正在努力了解如何以更好的方式做到这一点。
IIUC,只需创建一个条件列即可groupby使用str.extract
我们可以将数据帧保存在字典中。
dfs = {group : data.drop('key',1) for group,data in
df.assign(key=df['description'].str.extract('(vim\d+)'))\
.groupby('key')
}
Run Code Online (Sandbox Code Playgroud)
print(dfs['vim3'])
name description count
2 c vim3tests 6
3 d vim3zip 7
Run Code Online (Sandbox Code Playgroud)
print(dfs.keys())
dict_keys(['vim2', 'vim3', 'vim4'])
Run Code Online (Sandbox Code Playgroud)
或者 anky 更简单的解决方案 -
dfs = dict(tuple(
df.groupby(df['description'].str.extract('(vim\d+)'
,expand=False))
))
Run Code Online (Sandbox Code Playgroud)
或者:
dict(iter(df.groupby(df['description'].str.extract('(vim\d+)',expand=False)))
Run Code Online (Sandbox Code Playgroud)
print(dfs)
{'vim2': name description count
0 a vim2tests 4
1 b vim2trial 5,
'vim3': name description count
2 c vim3tests 6
3 d vim3zip 7,
'vim4': name description count
4 e vim4trial 8}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |