如何将行值与不同列中的所有行进行比较,以及如何使用Pandas分隔所有匹配的行

时间:2019-03-27 13:05:45

标签: python pandas

我有一个csv文件,其中包含一些银行的信息。总共有9列。 idparentid这两列,分别包含每个银行的ID,也包含parentidparentid = 0(如果给定的银行是父行,则用{表示) {1}})。

我需要将所有存储体分离到单独的数据帧中,以便父记录的所有子项都应与父记录位于同一数据帧中。

样本数据:

'Type = T'

我已经使用熊猫加载了csv文件,并根据“类型”列将子代和父代分开。

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

2 个答案:

答案 0 :(得分:0)

这会将数据帧拆分为数据帧的字典(键是父ID):

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

答案 1 :(得分:0)

groupby在这里可以提供帮助:

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

将为您提供一个元组(id,dataframe_for_that_id_and_its_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]