首页 > 解决方案 > 将行转换为熊猫列下的值列表

问题描述

如何使用 pandas 获得所需的输出:将行转换为列表列

输入格式:

col1 col2 col3 col4
1    a    r1   2019-10-10
1    a    r2   2019-10-11
1    a    r3   2019-10-12
2    b    r4   2019-10-08
2    b    r5   2019-10-09

期望的输出:

col1 col2 col4         new_column
1    a    2019-10-10   []
1    a    2019-10-11   [r1]
1    a    2019-10-12   [r1,r2]
2    b    2019-10-08   []
2    b    2019-10-09   [r4]

标签: pythonpandas

解决方案


我认为这应该做的工作!(假设您的日期列是日期时间类型而不是字符串):

dictionary = df.groupby(by=['col1','col2']).apply(lambda df2: df2[['col3', 'col4']].to_dict('index')).to_dict()   

def my_func(col1_value, col2_value, my_date, my_dictionary):
    df_bis = pd.DataFrame.from_dict(my_dictionary[(col1_value, col2_value)], orient='index')   
    return df_bis[df_bis['col4'] < my_date].col3.to_list()

df['new_col'] = df.apply(lambda row: my_func(row.col1, row.col2, row.col4, dictionary), 
                         axis = 1)

推荐阅读