[英]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
我想將數據幀拆分為幾個數據幀,以便在每個數據幀中我將擁有一對curr1
和curr2
。 例如:一個數據幀由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.