根据熊猫数据框中的其他索引值对索引值进行分组

时间:2019-10-08 17:16:18

标签: python python-3.x pandas hierarchical-data

我有一个具有以下结构的数据框


                     Sentence                 Label

A              B   
"unique ID1"   0    "Sample sentence 1"        jt
"unique ID1"   1   "Sample sentence 2"        jt  
"unique ID3"   2   "Sample sentence 3"        edu
"unique ID3"   3   "Sample sentence 4"        edu

我希望能够获得按索引B的值分组的索引A的所有值,其中label == jt并对所有唯一标签值重复。首选的返回类型是key-value对,但任何其他合适的格式也可以使用。

标签== jt的有效示例:

("unique ID1" : [0,1] )

标签== edu的有效示例:

("unique ID3" : [2,3] )

我已经尝试了许多SO问题,但是还没有找到我想要的东西。

我也尝试过:



sorted_index_df = df.sort_index(inplace = False)

multi_index = sorted_index_df.loc[sorted_index_df["label"] == "jt"].index

这样做将返回索引A的每个值及其对应的索引B的值作为单独的元组。

例如:('Labor_&_Delivery_Nurse-APRN__Lidia_Lambert__', 17)

但是我希望能够将索引B的所有值与索引A的值进行分组。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您可以通过如下所示的groupby来实现此目的

df = pd.DataFrame([['unique ID1', '0', 'Sample sentence 1', 'jt'], ['unique ID1', '1', 'Sample sentence 2', 'jt'], ['unique ID3', '2', 'Sample sentence 3', 'edu'], ['unique ID3', '3', 'Sample sentence 4', 'edu']], columns=('A', 'B', 'Sentence', 'Label'))
result = df.groupby(["A", "Label"]).agg({"B":list}).reset_index(level=0)

## you can get result for jt like

result.loc["jt"]

答案 1 :(得分:1)

尝试一下:

仅获得'jt'

df[df.Label.eq('jt')].reset_index(level=1).groupby(level=0).B.unique()

Out[22]:
A
unique ID1    [0, 1]
Name: B, dtype: object

仅获得'edu'

df[df.Label.eq('edu')].reset_index(level=1).groupby(level=0).B.unique()

Out[23]:
A
unique ID3    [2, 3]
Name: B, dtype: object

答案 2 :(得分:1)

为了提供更好的演示,我扩展了您的数据样本:

                Sentence Label
A   B                         
ID1 0  Sample sentence 1    jt
    1  Sample sentence 2    jt
ID3 2  Sample sentence 3   edu
    3  Sample sentence 4   edu
ID4 4  Sample sentence 5    jt
    5  Sample sentence 6    jt
ID5 6  Sample sentence 7   edu
    7  Sample sentence 8   edu

目标是每个 Label 至少具有2个不同的 ID

要计算所有 Label ID 的结果,就足够了 运行一条指令:

df.reset_index().groupby(['Label', 'A']).B.apply(list)

对于我的数据,结果是:

Label  A  
edu    ID3    [2, 3]
       ID5    [6, 7]
jt     ID1    [0, 1]
       ID4    [4, 5]