Pandas:在两个不同的列中获取具有相同值对的两个不同行

2024-09-27 04:10:46 发布

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

在这个示例数据中,我有两列\u Id和\u ParentId。我想用这个将\u Id与\u ParentId分组。你知道吗

       _Id  _ParentId
        1        NaN
        2        NaN
        3        1.0
        4        2.0
        5        NaN
        6        2.0

分组后的结果如下所示。你知道吗

       _Id  _ParentId
        1        NaN
        3        1.0
        2        NaN
        4        2.0
        6        2.0
        5        NaN

这样做的主要目的是将哪个Id属于哪个ParentId分组(例如Id 3属于Id 1)。你知道吗

我尝试使用groupby和duplicated,但似乎无法得到上面显示的结果。你知道吗


Tags: 数据目的id示例nangroupbyduplicatedparentid
2条回答

temp上使用sort_values

In [3188]: (df.assign(temp=df._ParentId.combine_first(df._Id))
              .sort_values(by='temp').drop('temp', 1))
Out[3188]:
   _Id  _ParentId
0    1        NaN
2    3        1.0
1    2        NaN
3    4        2.0
5    6        2.0
4    5        NaN

详细信息

In [3189]: df._ParentId.combine_first(df._Id)
Out[3189]:
0    1.0
1    2.0
2    1.0
3    2.0
4    5.0
5    2.0
Name: _ParentId, dtype: float64

In [3190]: df.assign(temp=df._ParentId.combine_first(df._Id))
Out[3190]:
   _Id  _ParentId  temp
0    1        NaN   1.0
1    2        NaN   2.0
2    3        1.0   1.0
3    4        2.0   2.0
4    5        NaN   5.0
5    6        2.0   2.0

您期望的输出与输入完全相同,只是id4和id6在一起,而nan位于不同的位置。不可能有那样的预期产出。你知道吗

以下是组员的理想工作方式:

print("Original: ")
print(df)

df = df.fillna(-1) # if not replaced with another character , the grouping won't show NaNs. 
df2 = df.groupby('_Parent')

print("\nAfter grouping: ")
for key, item in df2:
    print (df2.get_group(key))

输出:

Original: 
   _Id  _Parent
0    1      NaN
1    2      NaN
2    3      1.0
3    4      2.0
4    5      NaN
5    6      2.0

After grouping: 
   _Id  _Parent
0    1      0.0
1    2      0.0
4    5      0.0
   _Id  _Parent
2    3      1.0
   _Id  _Parent
3    4      2.0
5    6      2.0

相关问题 更多 >

    热门问题