簡體   English   中英

通過值對在熊貓中拆分數據幀

[英]Splitting data frame in pandas by pairs of values

我有以下數據框:

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的行組成, curr1 curr2

如何在Pandas或python中編寫代碼?

您可以使用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))
]

這就是我要解決的方法。

首先創建一個將兩種情況結合在一起的列

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

然后,您可以使用此新列來隔離不同的組合。 下面將選擇第x個唯一貨幣組合:

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

注意

df['curr_comb'].unique()

將返回所有不同組合的數組。

首先,我們得到了獨特的情侶

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM