![](/img/trans.png)
[英]Python Pandas - Replacing values of a part of data frame column based on index
[英]Group index values based on other index values in pandas Data Frame
我有一個具有以下結構的數據框
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
我希望能夠獲得按索引A
的值分組的索引B
的所有值,其中label == jt
並對所有唯一的 label 值重復此操作。 首選的返回類型是key-value
對,但任何其他適當的格式也可以。
("unique ID1": [0,1] )
("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)
但我希望能夠通過索引A
中的值對索引B
的所有值進行分組。
任何幫助表示贊賞。
您可以通過使用 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"]
嘗試這個:
只得到'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
為了提供更好的演示,我擴展了一些數據樣本:
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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.