나는 cols가있는 df가 있습니다.
start end strand
3 90290834 90290905 +
3 90290834 90291149 +
3 90291019 90291149 +
3 90291239 90291381 +
5 33977824 33984550 -
5 33983577 33984550 -
5 33984631 33986386 -
내가하려는 것은 스트랜드 컬럼을 기반으로 새 컬럼 (5ss 및 3ss)을 추가하는 것입니다.
f = pd.read_clipboard()
f
def addcolumns(row):
if row['strand'] == "+":
row["5ss"] == row["start"]
row["3ss"] == row["end"]
else:
row["5ss"] == row["end"]
row["3ss"] == row["start"]
return row
f = f.apply(addcolumns, axis=1)
KeyError: ('5ss', u'occurred at index 0')
코드의 어느 부분이 잘못 되었습니까? 아니면 더 쉬운 방법이 있습니까?
대신에 사용하는 .apply()
내가 사용하는 것이 좋습니다 것 np.where()
대신 :
df.loc[:, '5ss'] = np.where(f.strand == '+', f.start, f.end)
df.loc[:, '3ss'] = np.where(f.strand == '+', f.end, f.start)
np.where()
세 가지 인수를 기반으로 새 개체를 만듭니다.
f.strand == '+'
)apply()
with를 사용하면 axis=1
각 열에 함수 가 적용됩니다. 따라서 변수 이름을 지정했지만 row
실제로는 열을 반복합니다. axis
인수를 생략 하거나 axis=0
행에 함수를 적용하도록 지정할 수 있습니다. 그러나 수행하려는 작업을 고려할 때를 사용하는 것이 더 간단하여 np.where()
열 할당에 대한 조건부 논리를 지정할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다