Python 如何创建一个列,将列中的所有值分组到列表中,该列表位于表中不同列的值之间
我有两个数据帧,如下所示:Python 如何创建一个列,将列中的所有值分组到列表中,该列表位于表中不同列的值之间,python,pandas,Python,Pandas,我有两个数据帧,如下所示: unit start stop A 0.0 8.15 B 9.18 11.98 A 13.07 13.80 B 13.82 15.00 A 16.46 17.58 df_2 如果df_2.time介于df_1.start和df_1.stop之间,如何将df_2.other_数据中的所有值追加到列表(或数组)中?例如,第1行的df_2.time介于df_1.start和df_1.stop
unit start stop
A 0.0 8.15
B 9.18 11.98
A 13.07 13.80
B 13.82 15.00
A 16.46 17.58
df_2
如果df_2.time介于df_1.start和df_1.stop之间,如何将df_2.other_数据中的所有值追加到列表(或数组)中?例如,第1行的df_2.time介于df_1.start和df_1.stop之间的df_2.other_数据的所有值都将是[5,5,6,10,5,2,15]
所需的df如下所示
unit start stop other_data_list
A 0.0 8.15 [5,5,6,10,5,2,1,5]
B 9.18 11.98 [5,7,5]
A 13.07 13.80 [5]
B 13.82 15.00 [5,10,5]
A 16.46 17.58 [4,4]
使用以下命令:
df1['other'] = df1.apply(lambda row : df2['other_data'].loc[(df2['time'] > row['start']) & (df2['time'] < row['stop'])].tolist(), axis=1)
对于
df1
的每一行,使用apply
可以在df2
中选择所需的值。使用pandas.Series的tolist()
方法将所选内容转换为列表
,否则您将得到值错误:传递的项目数错误
您应该能够连接两个数据帧,然后使用.groupby()
为什么在13.07和13.80之间得到5?那不是空的吗?还有其他值不在两者之间,而是添加到列表中。
df1['other'] = df1.apply(lambda row : df2['other_data'].loc[(df2['time'] > row['start']) & (df2['time'] < row['stop'])].tolist(), axis=1)
unit start stop other
0 A 0.00 8.15 [5, 5, 6, 10, 5, 2, 1, 5]
1 B 9.18 11.98 [7, 5]
2 A 13.07 13.80 []
3 B 13.82 15.00 [10]
4 A 16.46 17.58 [4]