從這樣的資料框開始:
df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'b', 'b', 'a']})
A B
0 1 a
1 2 b
2 3 b
3 4 b
4 5 a
獲得這樣的資料框的最佳方法是什么?
pd.DataFrame({'source': [1, 2, 2, 3], 'target': [5, 3, 4, 4]})
source target
0 1 5
1 2 3
2 2 4
3 3 4
每次 A 列中的一行在 B 列中與 A 列中的另一行具有相同的值時,我想將該關系的唯一實體保存在新資料框中。
這非常接近:
df.groupby('B')['A'].unique()
B
a [1, 5]
b [2, 3, 4]
Name: A, dtype: object
但我現在最好把它轉換成一個單一的資料幀,我的大腦已經癱瘓了。
uj5u.com熱心網友回復:
在你的情況下,你可以做 itertools.combinations
import itertools
s = df.groupby('B')['A'].apply(lambda x : set(list(itertools.combinations(x, 2)))).explode().tolist()
out = pd.DataFrame(s,columns=['source','target'])
out
Out[312]:
source target
0 1 5
1 3 4
2 2 3
3 2 4
uj5u.com熱心網友回復:
使用合并功能
df.merge(df, how = "outer", on = ["B"]).query("A_x < A_y")
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/399118.html
下一篇:清理資料并將其轉換為數字熊貓
