다음과 같은 팬더 데이터 프레임이 있습니다 (그림).
import datetime
todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date-datetime.timedelta(10), periods=2, freq='D')
columnheader=['US', 'Canada', 'UK', 'Japan']
data=np.array([[3,4,2,1],[1,4,3,2]])
df = pd.DataFrame(data, index=index, columns=columnheader)
결과 :
US Canada UK Japan
2015-07-26 3 4 2 1
2015-07-27 1 4 3 2
각 행에 대해 값이 1과 2 인 열 머리글을 찾아야합니다.
그래서 나는 얻어야한다
['Japan', 'UK']
['US', 'Japan']
다음을 수행 할 수 있습니다. 각 행에서 1,2
사용 중인 멤버십을 테스트 isin
하고 부울 계열을 생성하는 경우 apply
다시 호출하여 열을 인덱싱하는 데 사용할 수 있습니다. 다음과 같은 경우 차원이 정렬되지 않으므로이를 목록으로 변환합니다. 당신은 이것을하지 않는다 :
In [191]:
df.apply(lambda x: x.isin([1,2]), axis=1).apply(lambda x: list(df.columns[x]), axis=1)
Out[191]:
2015-07-26 [UK, Japan]
2015-07-27 [US, Japan]
Freq: D, dtype: object
내부에서 출력 apply
:
In [192]:
df.apply(lambda x: x.isin([1,2]), axis=1)
Out[192]:
US Canada UK Japan
2015-07-26 False False True True
2015-07-27 True False False True
편집하다
순서를 유지하려면 각 값을 테스트하고이를 시리즈로 반환하는 함수를 정의 할 수 있습니다.
In [209]:
filter_vals=[1,2]
def func(x):
l=[]
for val in filter_vals:
for col in df:
if x[col] == val:
l.append(col)
return pd.Series(l)
df.apply(func, axis=1)
Out[209]:
0 1
2015-07-26 Japan UK
2015-07-27 US Japan
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다