【发布时间】:2020-05-19 17:12:06
【问题描述】:
我面临一个难题,需要在爆炸之前进行匹配。
我的问题最好用数据来描述。如下所示:
df = pd.DataFrame({
'A': [
[0.05, 0.055, 0.055, 0.06, 0.065, 0.07, 0.075, 0.075, 0.085, 0.09, 1.32],
[0.4, 0.06, 0.06, 0.13, 0.135, 0.145, 0.155, 0.17] ,
[3.81, 0.3, 0.4, 0.425, 0.445, 0.48, 0.51, 0.54, 0.58, 0.62, 0.66, 0.66, 0.705, 0.53, 0.57, 0.61],
[7.395, 0.075, 0.085, 0.09, 0.095, 0.1, 0.11, 0.12, 0.13, 0.14],
[0.105, 0.11, 0.12, 0.125, 0.135, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.205, 2.21]
],
'B' : [
[0.680, 1.320],
[0.520, 0.130, 0.135, 0.145, 0.155, 0.170],
[8.035, 3.810],
[0.945, 7.395],
[1.790, 2.210]
],
'C' : [
['08/01/91', '08/01/10'],
['09/01/92', '09/01/93', '09/01/94', '09/01/95', '09/01/96', '09/01/10'],
['11/01/91', '11/01/10'],
['09/01/93', '09/01/21'],
['12/01/92', '12/01/10']
]
})
df
A B C
0 [0.05, 0.055, 0.055, 0.06, 0.065, 0.07, 0.075, 0.075, 0.085, 0.09, 1.32] [0.68, 1.32] [08/01/91, 08/01/10]
1 [0.4, 0.06, 0.06, 0.13, 0.135, 0.145, 0.155, 0.17] [0.52, 0.13, 0.135, 0.145, 0.155, 0.17] [09/01/92, 09/01/93, 09/01/94, 09/01/95, 09/01/96, 09/01/10]
2 [3.81, 0.3, 0.4, 0.425, 0.445, 0.48, 0.51, 0.54, 0.58, 0.62, 0.66, 0.66, 0.705, 0.53, 0.57, 0.61] [8.035, 3.81] [11/01/91, 11/01/10]
3 [7.395, 0.075, 0.085, 0.09, 0.095, 0.1, 0.11, 0.12, 0.13, 0.14] [0.945, 7.395] [09/01/93, 09/01/21]
4 [0.105, 0.11, 0.12, 0.125, 0.135, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.205, 2.21] [1.79, 2.21] [12/01/92, 12/01/10]
保证A中list的元素之和等于B中list的元素之和。通常它们是有序的,但也有反转的情况。
例如第0行这样的情况,前10个元素总和为0.68,1.32按顺序匹配。
但是,第 2 行是相反的,因为 3.81 匹配 B 的最后一个元素。B 和 C 列来自同一数据集,因此应将它们翻转以匹配 A 的顺序。
匹配和爆炸后我想要的输出如下:
A B C
0 0.05 0.68 08/01/91
0 0.055 0.68 08/01/91
0 0.055 0.68 08/01/91
0 0.06 0.68 08/01/91
0 0.065 0.68 08/01/91
0 0.07 0.68 08/01/91
0 0.075 0.68 08/01/91
0 0.085 0.68 08/01/91
0 0.09 0.68 08/01/91
0 1.32 1.32 08/01/10
...
2 3.81 3.81 11/01/10
2 0.3 8.035 11/01/91
2 0.4 8.035 11/01/91
2 0.425 8.035 11/01/91
2 0.445 8.035 11/01/91
2 0.48 8.035 11/01/91
2 0.51 8.035 11/01/91
2 0.54 8.035 11/01/91
2 0.58 8.035 11/01/91
2 0.62 8.035 11/01/91
2 0.66 8.035 11/01/91
2 0.66 8.035 11/01/91
2 0.705 8.035 11/01/91
2 0.52 8.035 11/01/91
2 0.57 8.035 11/01/91
2 0.61 8.035 11/01/91
我们非常感谢任何想法和方法。
我发现我在上面的数据上犯了错误,我更正了。 B & C 他们的列表中总是有确切数量的元素。
第 1 行案例:我想要的输出将是:
1 0.4 0.520 09/01/92
1 0.06 0.520 09/01/92
1 0.06 0.520 09/01/92
1 0.13 0.130 09/01/93
1 0.135 0.135 09/01/94
1 0.145 0.145 09/01/95
1 0.155 0.155 09/01/96
1 0.17 0.17 09/01/10
【问题讨论】:
-
第 3 行在 B 列中有大约 5 个条目 - [0.52, 0.13, 0.135, 0.145, 0.155, 0.17]。这个问题的规则是什么?
-
@sammywemmy 我更正并更新了帖子,感谢您指出这一点。
标签: python-3.x pandas list