我有一系列包含 7 個元素的串列(但可以是任何數字)。我正在嘗試找到包含所有正面元素、所有負面元素以及在任何時候改變符號的串列,
例如[3, 6, 7, -2, -5, -1, -1]或[3, 1, -1, -2, -1, -5, -1]。
請注意,盡管我integers在示例中使用了,但lists它們實際上是由floats.
我可以很容易地找到所有總是正面或負面的串列,但是我如何找到那些改變符號的串列(它可以從正面變為負面,如示例或從負面變為正面)。
uj5u.com熱心網友回復:
使用 for 回圈從第 0 個元素迭代到倒數第二個元素并比較符號或檢查 2 個連續數字的乘積是否小于 0。
如果是,則追加串列中的元素。
uj5u.com熱心網友回復:
假設系列是
0 [3, 6, 7, -2, -5, -1, -1]
1 [3, 1, -1, -2, -1, -5, -1]
dtype: object
您可以嘗試獲取 Series 中串列的每個元素的符號并將它們相加。
- 如果結果為 7,則表示全部為正,
- 如果結果為-7,則表示全部為負
- 否則,它可能會改變標志。(考慮為零)
m = s.apply(lambda lst: sum(map(np.sign, lst)))
print(m)
0 -1
1 -3
dtype: int64
要考慮串列中的零,您可以加入符號串列并檢查是否存在1,-1或-1,1
n = s.apply(lambda lst: ','.join(map(str, map(np.sign, lst))))
n = n.str.contains('1,-1|-1,1')
print(n)
0 True
1 True
dtype: bool
如果你不限制 0 的地方,你可以檢查是否有1和-1在標志串列中
n = s.apply(lambda lst: {1, -1}.issubset(set(map(np.sign, lst))))
uj5u.com熱心網友回復:
像這樣的東西可以在 numpy 中更好地實作,開銷更少
x = np.array([[3, 6, 7, -2, -5, -1, -1],[3, 1, -1, -2, -1, -5, -1]])
allpositive = (x>0).all(axis=1)
allnegative = (x<0).all(axis=1)
mixed = ((x>0)|(x<0)).any(axis=1)
您的特定資料集的結果:
>>> x
array([[ 3, 6, 7, -2, -5, -1, -1],
[ 3, 1, -1, -2, -1, -5, -1]])
>>> allpositive
array([False, False])
>>> allnegative
array([False, False])
>>> mixed
array([ True, True])
根據您的喜好調整行為以覆寫 0 的符號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479564.html
下一篇:過濾包含特定字串的串列
