我有以下数据框:
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和{的行组成{1}} == BGN等
如何在pandas或python中编写代码?
答案 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