繁体   English   中英

Pandas dataframe 根据其他列给列表赋值

[英]Pandas dataframe assign value to lists based on other columns

我有一个这样的 dataframe:

   id  cola colb
0   0   0    [1]
1   1   1    [2,3,4]
2   1   2    [2,3,4]
3   2   3    [3]
4   2   4    [3]
5   2   5    [4]
6   3   6    [5]
...

并希望它转换为:

   id  cola colb      colc
0   0   0    [1]       
1   1   1    [2,3,4]   0
2   1   2    [2,3,4]   0
3   2   3    [3]       1,2
4   2   4    [3]       1,2
5   2   5    [4]       1,2
6   3   6    [5]       1,2,3,4
...

规则是:

以第一行为例,colb=[1],对应cola=0,则cola=0 追加到id=[1]的colc 单元格列表中。

以第二行为例,colb=[2,3,4],对应cola=1,则将cola=1追加到id=[2,3,4]的colc单元格列表中。

以第三行为例,colb=[2,3,4],对应cola=2,则将cola=2追加到colc中的cell list for id=[2,3,4]。 ...

到目前为止,这是我尝试过的:

df['colc'] = [[] for _ in range(len(df))]
for i in range(len(df['colb'])):
    lista = df.colb[i]
    for j in lista:
        df.colc.loc[df.id==j].append(pd.Series(df.cola[i])) 

但似乎df.colc.loc[df.id==j]问题,列表中没有附加任何值。 有没有办法做到这一点? 有人能这么好心帮助我吗? 谢谢!

df = pd.DataFrame({
    'id': [0,1,1,2,2,2,3],
    'cola': [0,1,2,3,4,5,6],
    'colb': [[1], [2,3,4], [2,3,4], [3], [3], [4], [5]],
})

colbid列表的一列, cola是我们用来形成colc的,所以我们可以挑选出那些列,重命名它们,然后分解重命名的id列,这样所有列表都分解成行。 展开的行之前将共享相同的colc值。

step1 = df[['colb', 'cola']].rename(columns={'colb': 'id', 'cola': 'colc'}).explode('id')

然后我们可以groupby形成不同id的列表

step2 = step1.groupby('id')['colc'].apply(list)

最后将这些列表合并回来

df.merge(step2, on='id', how='left')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM