按值对拆分数据帧

2024-09-26 18:07:54 发布

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

我有以下数据框:

id          value    curr1 curr2
06263100612 136.91   EUR   RUB 
06337100254 822.23   EUR   BGN 
06341101120 2508.37  RUB   BGN 
06260101780 373.33   EUR   BGN  
07110100385 3829.60  USD   BGN 
06242101069 742.84   EUR   GBP 
06229100016 742.84   EUR   BGN 

我想将数据帧分割成几个数据帧,这样在每个数据帧中我将有一对curr1curr2。例如:一个数据帧由curr1==EUR和curr2==BGN的行组成,第二个数据帧由curr1==RUB和curr2==BGN的行组成,等等

如何用pandas或python编写代码?你知道吗


Tags: 数据代码idpandasvalueeurusdgbp
3条回答

我就是这么做的。你知道吗

首先创建一个组合这两种货币的列

df['curr_comb'] = df['curr1'] + df['curr2']

然后可以使用这个新列来隔离不同的组合。下面将选择第x个唯一货币组合:

df[df['curr_comb']==df['curr_comb'].unique()[x]]

注意

df['curr_comb'].unique()

将返回所有不同组合的数组。你知道吗

您可以使用groupby并对结果进行迭代:

 for (curr1,curr2),df2 in df.groupby(["curr1","curr2"]):
      # df2 is a subset of df

您可以将这些列组合成一组唯一的元组,然后创建一个新字典,其中键是元组,值是原始数据帧的子集:

dfs_by_curr_pair = {
    (curr1, curr2): df[(df.curr1 == curr1) & (df.curr2 == curr2)] 
    for curr1, curr2 in set(zip(df.curr1, df.curr2))
}

如果你不想要一本字典,你可以把它列成一个列表:

dfs_by_curr_pair = [
    df[(df.curr1 == curr1) & (df.curr2 == curr2)] 
    for curr1, curr2 in set(zip(df.curr1, df.curr2))
]

相关问题 更多 >

    热门问题