如何将行值与其他列中的所有行进行比较,并使用Pandas分隔所有匹配的行

2024-09-27 21:27:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件,包含一些银行的信息。共有9列。有两列,idparentid,它们包含每个银行的id,并且也是parentidparentid = 0,如果给定的银行是由'Type = T'表示的父银行)

我需要将所有银行分离成单独的数据帧,这样父记录的所有子记录都应该与父记录在同一个数据帧中

样本数据:

type,symbol,price,quantity,expirydate,strikeprice,amendtime,id,parentid
T,ICICIBANK,1000,100,20121210,120,20121209103030,1234,0
T,AXISBANK,1000,100,20121210,120,20121209103031,1235,0
T,SBIBANK,1000,100,20121210,120,20121209103032,1236,0
P,ICICIBANK,1100,100,20121210,120,20121209103030,1237,1234
P,AXISBANK,1000,100,20121210,120,20121209103031,1238,1235
T,ICICIBANK,1000,100,20121210,120,20121209103035,1239,0
T,.CITIBANK,1000,101,20121210,120,20121209103036,1240,0
P,ICICIBANK,1100,100,20121210,120,20121209103030,1241,1234
P,ICICIBANK,1100,100,20121210,120,20121209103035,1242,1239

我已经使用pandas加载了csv文件,并根据Type列将子级和父级分开

我被剩下的部分困住了。This is what a sample dataframe looks like


Tags: 文件csv数据信息idtype记录银行
2条回答

groupby可以在这里提供帮助:

df.groupby(np.where(df.parentid==0, df.id, df.parentid))

将给您一个元组的iterable(id,dataframe,表示该id和它的childs)

示例:

for i, g in df.groupby(np.where(df.parentid==0, df.id, df.parentid)):
    print(i)
    print(g)

提供:

1234
  type     symbol  price    ...          amendtime    id  parentid
0    T  ICICIBANK   1000    ...     20121209103030  1234         0
3    P  ICICIBANK   1100    ...     20121209103030  1237      1234
7    P  ICICIBANK   1100    ...     20121209103030  1241      1234

[3 rows x 9 columns]
1235
  type    symbol  price    ...          amendtime    id  parentid
1    T  AXISBANK   1000    ...     20121209103031  1235         0
4    P  AXISBANK   1000    ...     20121209103031  1238      1235

[2 rows x 9 columns]
1236
  type   symbol  price    ...          amendtime    id  parentid
2    T  SBIBANK   1000    ...     20121209103032  1236         0

[1 rows x 9 columns]
1239
  type     symbol  price    ...          amendtime    id  parentid
5    T  ICICIBANK   1000    ...     20121209103035  1239         0
8    P  ICICIBANK   1100    ...     20121209103035  1242      1239

[2 rows x 9 columns]
1240
  type     symbol  price    ...          amendtime    id  parentid
6    T  .CITIBANK   1000    ...     20121209103036  1240         0

[1 rows x 9 columns]

这将把dataframe拆分为dataframes字典(键是父id):

selection = df['parentid'].mask(df['parentid']==0, df['id'])
{sel: df.loc[selection == sel] for sel in selection.unique()}

相关问题 更多 >

    热门问题