通过成对的值在pandas中拆分数据框

时间:2017-08-09 11:54:56

标签: python pandas

我有以下数据框:

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和{的行组成{1}} == BGN等

如何在pandas或python中编写代码?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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))
]

答案 2 :(得分:0)

我就是这样做的。

首先创建一个组合两个currs的列

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

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

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

请注意

df['curr_comb'].unique()

将返回所有不同组合的数组。

答案 3 :(得分:0)

首先,我们得到独特的伴侣

couples = set(list(zip(df['curr1'],df['curr2'])))

然后,我们选择

for couple in couples:
    print(df[(df['curr1']==couple[0]) & (df['curr2']==couple[1])])
    print('\n')

这里我打印,但你可以在列表中存储它们,例如。

输出:

  curr1 curr2   identifier   value
0   EUR   RUB  06263100612  136.91


  curr1 curr2   identifier   value
1   EUR   BGN  06337100254  822.23
3   EUR   BGN  06260101780  373.33
6   EUR   BGN  06229100016  742.84


  curr1 curr2   identifier    value
2   RUB   BGN  06341101120  2508.37


  curr1 curr2   identifier   value
5   EUR   GBP  06242101069  742.84


  curr1 curr2   identifier   value
4   USD   BGN  07110100385  3829.6