Python 将行转换为表中某列下的值列表

Python 将行转换为表中某列下的值列表,python,pandas,Python,Pandas,如何使用pandas获得所需的输出: 将行转换为列表列 输入格式: col1 col2 col3 col4 1 a r1 2019-10-10 1A 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新列 1a 2019-10-10[] 1A 2019-10-11[r1] 1A 2019-10-12[r1,r2] 2b 2019-10-08[] 2b 2019-10-0

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

输入格式:

col1 col2 col3 col4
1 a r1 2019-10-10
1A 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新列
1a 2019-10-10[]
1A 2019-10-11[r1]
1A 2019-10-12[r1,r2]
2b 2019-10-08[]
2b 2019-10-09[r4]

我认为这应该可以完成这项工作!(假设日期列的类型为datetime而不是string):

dictionary=df.groupby(by=['col1','col2'])。应用(lambda-df2:df2[['col3','col4']]。到dict('index'))。到dict()
定义my_func(col1_值、col2_值、my_日期、my_字典):
df_bis=pd.DataFrame.from_dict(我的字典[(col1\u值,col2\u值)],orient='index')
返回df_bis[df_bis['col4']
@Hugues GALLIER,您做了一个很好的技巧,将数据帧复制到字典中,然后使用一个新的数据帧(col1,col2组合)为相关键重新创建它,然后根据条件进行过滤

@Sunny Kumar,我感谢您提出这个问题,因为我了解到在dataframe中保存列表对象正在失去幕后矢量化工作的能力。因此,在大多数情况下,最好将其另存为字符串,以便在使用时可以将其解释为numpy数组

我的解决方案与此相同,但使用数据帧的副本(而不是字典副本),我认为更简单:

df_temp = df.copy()

def prep_list(col1,col2,col4,df): 
    return df[(df.col1==col1) & (df.col2==col2) & (df.col4 < col4)].col3.to_list()

df['new_column'] = df.apply(lambda row: prep_list(row.col1,row.col2,row.col4,df_temp), axis=1) 
df_temp=df.copy()
def准备清单(col1、col2、col4、df):
返回df[(df.col1==col1)&(df.col2==col2)&(df.col4
标准是什么?规则是什么?对于小于当前日期(col4中的日期)的日期,将行转换为col1和col2组合的列表,并将其分配给新列。
df_temp = df.copy()

def prep_list(col1,col2,col4,df): 
    return df[(df.col1==col1) & (df.col2==col2) & (df.col4 < col4)].col3.to_list()

df['new_column'] = df.apply(lambda row: prep_list(row.col1,row.col2,row.col4,df_temp), axis=1)