有两个数据帧,var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: labels,
datasets: [
{
label: 'Q1',
borderColor: colorQ1,
borderWidth: 2,
backgroundColor: colorQ1,
data: dataQ1,
fill: 'start',
lineTension: 0,
pointRadius: 0,
},
...
]
},
options: {
elements: {
point: {
radius: 0
}
},
maintainAspectRatio: false,
legend: {
display: false
},
tooltips: {
callbacks: {
title: function() {},
label: function(item, data) {
if (item.datasetIndex == 5 || item.datasetIndex == 0) {
return null;
}
return ' ' + addCommas(Math.ceil(item.yLabel)) + ' €';
}
},
itemSort: function(a, b) {
return b.datasetIndex - a.datasetIndex
},
intersect: false,
mode: 'label',
}
},
});
和df_A
df_B
现在,我需要在列df_A
Out[61]:
A B
0 1 10
1 2 60
2 3 40
df_B
Out[62]:
A B D
0 1 5 10
1 1 10 25
2 1 20 60
3 2 5 10
4 2 10 25
5 2 20 60
6 3 10 20
7 3 15 40
8 3 25 80
和df_A
的列df_B
和A
处加入连接,棘手的部分是B
,应考虑如下< / p>
df_B
因此,对于df_B
Out[64]:
A B D
0 1 [5,10) 10
1 1 [10,20) 25
2 1 [20:) 60
3 2 [5,10) 10
4 2 [10,20) 25
5 2 [20:) 60
6 3 [10,15) 20
7 3 [15,25) 40
8 3 [25:) 80
大于等于5且小于10的值,当B
时应返回值'10'
我的输出数据框应该是这样的
df_A['A'] == 1
答案 0 :(得分:0)
我敢肯定还有更多的熊猫/矢量化方法可以做到这一点,但这是一个选择:
C = []
for A, B in zip(df_A['A'],df_A['B']):
idx = ((df_B[df_B['A']==A]['B'] > B).cumsum() == 0).sum() - 1
C.append(df_B[df_B['A']==A].iloc[idx,-1])
df_C = df_A.copy(deep=True).assign(C=C)
现在
>>> df_C
A B C
0 1 10 25
1 2 60 60
2 3 40 80