[英]Pandas: Generate Experimenter-Subject Combinations Per Day
我在 dataframe 中有一組實驗日和受試者(下面的匿名子集)。如何在新的 dataframe 中每天生成所有成對比較,其中受試者也扮演實驗者的角色?
輸入:
日 | 學科 |
---|---|
周一 | Α |
周一 | 布拉沃 |
周一 | 查理 |
周三 | 三角洲 |
周三 | 回聲 |
周三 | 狐步舞 |
周三 | 高爾夫球 |
周三 | 酒店 |
預計 Output:
日 | 學科 | 實驗者 |
---|---|---|
周一 | Α | 布拉沃 |
周一 | Α | 查理 |
周一 | 布拉沃 | 查理 |
周三 | 三角洲 | 回聲 |
周三 | 三角洲 | 狐步舞 |
周三 | 三角洲 | 高爾夫球 |
周三 | 三角洲 | 酒店 |
周三 | 回聲 | 狐步舞 |
周三 | 回聲 | 高爾夫球 |
周三 | 回聲 | 酒店 |
周三 | 狐步舞 | 高爾夫球 |
周三 | 狐步舞 | 酒店 |
周三 | 高爾夫球 | 酒店 |
到目前為止,我只能生成全部組合,但不能按天生成!
import numpy as np
import pandas as pd
import itertools as it
df = pd.DataFrame({'Day': ['Monday', 'Monday', 'Monday', 'Wednesday', 'Wednesday', 'Wednesday', 'Wednesday', 'Wednesday'],
'Subject': ['Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot', 'Golf', 'Hotel']})
pair_order_list = it.combinations(df['Subject'], 2)
pairs = list(pair_order_list)
實際Output
[('Alpha', 'Bravo'), ('Alpha', 'Charlie'), ('Alpha', 'Delta'),...]
任何的建議都受歡迎?
以下代碼似乎生成了預期的 output:
from itertools import combinations
# https://stackoverflow.com/questions/72811105/how-can-i-search-for-sub-groups-of-dataframe-that-contains-specific-pairs-of-dat.
L = [(i, tuple(y)) for i, x in df.groupby('Day')['Subject'] for y in combinations(x, 2)]
df_2 = pd.DataFrame(L, columns=['Day','SubjExp'])
# https://stackoverflow.com/questions/29550414/how-can-i-split-a-column-of-tuples-in-a-pandas-dataframe.
df_2[['Subject', 'Experimenter']] = pd.DataFrame(df_2['SubjExp'].tolist(), index=df_2.index)
df_2 = df_2.drop('SubjExp', axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.