你能帮我处理一下我的情况吗?我想合并2个数据集,得到预期的结果如下:
Df 1:数据帧汇总每个ID的特征值如下:
id | feature 1 | feature 2 | 1 | 1.2 | 3.4 | 2
---|---|---|
2.3 | 1.2 | |
3 | 3.5 | 6 |
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'id': [1, 2, 3], 'feature 1': [1.2, 2.3, 3.5], 'feature 2': [3.4, 1.2, 6]})
df2 = pd.DataFrame({'Feature': ['feature 1', 'feature 1', 'feature 1', 'feature 2', 'feature 2', 'feature 2'],
'Min': [0, 1, 2, 0, 4, 5], 'Max': [1, 2, np.inf, 4, 5, np.inf], 'segment': [1, 2, 3, 1, 2, 3]})
df1 = df1.set_index('id')
def func_data(x, q):
df = df2[df2['Feature'] == q]
ttt = np.where((x.values[0] >= df['Min']) & (x.values[0] <= df['Max']))
index = df1.index[ttt][0]
return index
df1['feature_1_segment'] = df1.groupby(['id'])['feature 1'].apply(func_data, 'feature 1')
df1['feature_2_segment'] = df1.groupby(['id'])['feature 2'].apply(func_data, 'feature 2')
df1 = df1.reset_index()
print(df1)
输出id feature 1 feature 2 feature_1_segment feature_2_segment
0 1 1.2 3.4 2 1
1 2 2.3 1.2 3 1
2 3 3.5 6.0 3 3
这里,首先将'id'列设置为索引。创建一个'func_data '函数来确定每个数字属于哪个范围。np。其中来自numpy的函数用于测试范围。通过'id'获取索引