我有一個列數為 x 的資料框,例如-
|a |b |c |d |e |f |g |h |i |median|
|----|----|----|----|----|----|----|----|----|------|
|0.10|0.08|0.29|0.13|0.03|0.29|0.06|0.03|0.06|0.08 |
|0.82|0.18|0.14|0.12|0.08|0.12|0.08|0.06|0.10|0.12 |
|0.57|0.17|0.13|0.14|0.05|0.16|0.05|0.04|0.09|0.13 |
我想要另一列名為“possible_labels”的列,其中我有一個所有可能列名的串列,以排序方式滿足條件
dataframe[column_name] >= dataframe['median']
例如-
|a |b |c |d |e |f |g |h |i |median|possible_labels|
|----|----|----|----|----|----|----|----|----|------|-------------|
|0.10|0.08|0.29|0.13|0.03|0.29|0.06|0.03|0.06|0.08 |[c,f,d,a,b] |
|0.82|0.18|0.14|0.12|0.08|0.12|0.08|0.06|0.10|0.12 |[a,b,c,d,f] |
|0.57|0.17|0.13|0.14|0.05|0.16|0.05|0.04|0.09|0.13 |[a,b,f,d,c] |
在“possible_labels”列中,前5個列名不存在,它們是滿足條件的列名
dataframe[column_name] >= dataframe['median']
在哪里:
column_name = ['a','b','c','d','e','f','g','h','i']
uj5u.com熱心網友回復:
使用自定義函式進行排序和過濾:
def f(x):
y = x[:-1].sort_values(ascending=False)
return y.index[y >= x['median']].tolist()
df['possible_labels'] = df.apply(f, axis=1)
print (df)
a b c d e f g h i median \
0 0.10 0.08 0.29 0.13 0.03 0.29 0.06 0.03 0.06 0.08
1 0.82 0.18 0.14 0.12 0.08 0.12 0.08 0.06 0.10 0.12
2 0.57 0.17 0.13 0.14 0.05 0.16 0.05 0.04 0.09 0.13
possible_labels
0 [c, f, d, a, b]
1 [a, b, c, d, f]
2 [a, b, f, d, c]
pandas 函式的另一種解決方案 -DataFrame.melt用于逆透視、過濾依據DataFrame.query、排序依據DataFrame.sort_values和list按索引最后聚合:
column_name = ['a','b','c','d','e','f','g','h','i']
df['possible_labels'] =(df.melt(id_vars=['median'],value_vars=value_vars,ignore_index=False)
.query('value >= median')
.sort_values('value',ascending=False)
.groupby(level=0)['variable']
.agg(list))
print (df)
a b c d e f g h i median \
0 0.10 0.08 0.29 0.13 0.03 0.29 0.06 0.03 0.06 0.08
1 0.82 0.18 0.14 0.12 0.08 0.12 0.08 0.06 0.10 0.12
2 0.57 0.17 0.13 0.14 0.05 0.16 0.05 0.04 0.09 0.13
possible_labels
0 [c, f, d, a, b]
1 [a, b, c, d, f]
2 [a, b, f, d, c]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/336087.html
上一篇:創建新列并根據其他列值填充它們
