基于列的值在python pandas中创建新的 Dataframe

u7up0aaq  于 2022-11-20  发布在  Python
关注(0)|答案(3)|浏览(198)

我有一个数据集,看起来像这样:

在列'query id'中有15个唯一值,所以我尝试为每个唯一值创建新的 Dataframe 。我想为列'query id'中的每个唯一值创建一个循环,代码如下:

df_list = []
i = 0

for x in df['query id'].unique():
    df{i} = pd.DataFrame(columns=df.columns) 
    df_list.append()
    i+=1

但我肯定是在那里做错了什么,被卡住了。你有什么想法怎么做吗?
示例数据集:

relevance   query id   1   2   3
        1   WT04-170  10  40  80
        1   WT04-170  20  60  70
        1   WT04-176  30  70  50     
        1   WT04-176  40  90  20      
        1   WT04-173  50 100  10
h4cxqtbf

h4cxqtbf1#

Pandas有一个内置函数,用于迭代列中的唯一值并选择匹配的行。
在您的情况下,您可以使用以下命令将字典创建为一行程序:

dfs = {query_id: grp.copy() for query_id, grp in df.groupby("query id")}

有了 Dataframe 字典后,可以使用查询id作为关键字来访问每个 Dataframe :

my_df = dfs["WT04-170"]  # Access each dataframe using the appropriate key
my_df.describe()  # Do your work with the dataframe here
ctzwtxfj

ctzwtxfj2#

这样有用吗?

df_list = []

for x in set(df['query id'].to_list()):
    df = df[df['query id'] == x].copy() 
    df_list.append(df)
06odsfpq

06odsfpq3#

听起来您需要的是每个唯一查询id的过滤 Dataframe 。因此,您最终将得到15个 Dataframe ,每个 Dataframe 仅包含组合df中该特定查询id的行。是这样吗?
在这种情况下,您的方法很接近,但您可以在循环中过滤df。我也使用了dict来存储结果 Dataframe ,但您也可以使用列表来完成。
如果我对你所寻找的东西的理解是正确的,我认为这应该对你有用:

df_dict = {}
for (i,x) in enumerate(df['query id'].unique()):
    df_dict[i] = df[df['query id']==x].copy()

您也可以只使用query_ids作为dict键,如下所示:

df_dict = {}
for x in df['query id'].unique():
    df_dict[x] = df[df['query id']==x].copy()

相关问题