pandas 从主 Dataframe 创建不同的 Dataframe 并按频率排序

368yc8dk  于 2023-01-07  发布在  其他
关注(0)|答案(2)|浏览(100)

我有一个 Dataframe ,看起来像这样

a     b      name    .....
1     1      abc
2     2      xyz
3     3      abc
4     4      dfg

现在我需要根据名字的频率创建多个 Dataframe ,比如df_abc应该包含名字“abc”的所有数据等等。尝试使用for循环,但是我是python新手,无法解决这个问题。谢谢!

df_abc

a    b     name
1    1     abc
3    3     abc
svujldwt

svujldwt1#

你可以使用.groupbylist来生成一个元组列表。使用dict-comprehension,你可以使用my_dict["abc"]来访问这些 Dataframe 。

df = pd.DataFrame(
    {"a": [1, 2, 3, 4], "b": [1, 2, 3, 4], "name": ["abc", "xyz", "abc", "dfg"]}
)
my_dict={name:df for name, df in list(df.groupby("name")) }

for val, df_val in my_dict.items():
    print(f"df:{df_val}\n")
2wnc66cl

2wnc66cl2#

您可以创建一个 Dataframe 字典,该字典保存用"名称"列中的唯一值过滤的不同数据集。然后,您可以像引用字典一样引用每个 Dataframe :
参见以下示例:

import pandas as pd
from io import StringIO 

d = """
a     b      name
1     1      abc
2     2      xyz
3     3      abc
4     4      dfg
"""

df=pd.read_csv(StringIO(d),sep=" ")[['a','b','name']]

dfs = {}
for item in df['name']:
    dfs[item] = df.loc[df['name'] == item]
>>> dfs.keys()
dict_keys(['abc', 'xyz', 'dfg'])

>>> dfs['abc']
   a  b name
0  1  1  abc
2  3  3  abc

>>> dfs['xyz']
   a  b name
1  2  2  xyz

>>> dfs['dfg']
   a  b name
3  4  4  dfg

相关问题