Pandas 列表中值的Groupby
我有一个很大的数据集,需要根据一个名为AoIs的列执行计算。例如,对于Pandas 列表中值的Groupby,pandas,Pandas,我有一个很大的数据集,需要根据一个名为AoIs的列执行计算。例如,对于Name==“P_01”的所有点,我需要front位于AoIs列中的所有持续时间的总和。然后我想对侧和关注点表单执行相同的操作。我按名称对df进行分组,但我尝试的任何列表操作都失败了 以下是我正在处理的数据片段: Name AoIs duration 0 P_01 NaN 1704.0 1 P_01 Na
Name==“P_01”
的所有点,我需要front
位于AoIs
列中的所有持续时间的总和。然后我想对侧
和关注点表单
执行相同的操作。我按名称对df进行分组,但我尝试的任何列表操作都失败了
以下是我正在处理的数据片段:
Name AoIs duration
0 P_01 NaN 1704.0
1 P_01 NaN 1654.0
2 P_01 NaN 731.0
3 P_01 NaN 3317.0
4 P_01 NaN 897.0
5 P_01 NaN 773.0
6 P_01 NaN 1155.0
7 P_01 [side,front] 1064.0
8 P_01 [concerns_form] 299.0
9 P_01 [concerns_form] 390.0
df = pd.read_json('{"Name":{"0":"P_01","1":"P_01","2":"P_01","3":"P_01","4":"P_01","5":"P_01","6":"P_01","7":"P_01","8":"P_01","9":"P_01","10":"P_01","11":"P_01","12":"P_01","13":"P_01","14":"P_01","15":"P_01","16":"P_01","17":"P_01","18":"P_01","19":"P_01"},"AoIs":{"0":null,"1":null,"2":null,"3":null,"4":null,"5":null,"6":null,"7":["front", "side"],"8":["concerns_form","side"],"9":["concerns_form"],"10":["concerns_form"],"11":["concerns_title"],"12":["concerns_form"],"13":["concerns_submit"],"14":["side_nav"],"15":["concerns_title"],"16":["side_nav"],"17":["concerns_form"],"18":["concerns_title"],"19":["concerns_title"]},"duration":{"0":1704.0,"1":1654.0,"2":731.0,"3":3317.0,"4":897.0,"5":773.0,"6":1155.0,"7":1064.0,"8":299.0,"9":390.0,"10":1612.0,"11":1396.0,"12":2236.0,"13":798.0,"14":274.0,"15":182.0,"16":440.0,"17":166.0,"18":382.0,"19":282.0}}')
下面是一段代码,用于创建类似于我正在使用的df:
Name AoIs duration
0 P_01 NaN 1704.0
1 P_01 NaN 1654.0
2 P_01 NaN 731.0
3 P_01 NaN 3317.0
4 P_01 NaN 897.0
5 P_01 NaN 773.0
6 P_01 NaN 1155.0
7 P_01 [side,front] 1064.0
8 P_01 [concerns_form] 299.0
9 P_01 [concerns_form] 390.0
df = pd.read_json('{"Name":{"0":"P_01","1":"P_01","2":"P_01","3":"P_01","4":"P_01","5":"P_01","6":"P_01","7":"P_01","8":"P_01","9":"P_01","10":"P_01","11":"P_01","12":"P_01","13":"P_01","14":"P_01","15":"P_01","16":"P_01","17":"P_01","18":"P_01","19":"P_01"},"AoIs":{"0":null,"1":null,"2":null,"3":null,"4":null,"5":null,"6":null,"7":["front", "side"],"8":["concerns_form","side"],"9":["concerns_form"],"10":["concerns_form"],"11":["concerns_title"],"12":["concerns_form"],"13":["concerns_submit"],"14":["side_nav"],"15":["concerns_title"],"16":["side_nav"],"17":["concerns_form"],"18":["concerns_title"],"19":["concerns_title"]},"duration":{"0":1704.0,"1":1654.0,"2":731.0,"3":3317.0,"4":897.0,"5":773.0,"6":1155.0,"7":1064.0,"8":299.0,"9":390.0,"10":1612.0,"11":1396.0,"12":2236.0,"13":798.0,"14":274.0,"15":182.0,"16":440.0,"17":166.0,"18":382.0,"19":282.0}}')
我会添加一些新的列,然后进行一些分组
df['side'] = df['AoIs'].map(str).str.contains('side')
df['front'] = df['AoIs'].map(str).str.contains('front')
df['concerns_form'] = df['AoIs'].map(str).str.contains('concerns_form')
然后结束,例如:
df[df['side']==True].groupby('Name').sum()
我会添加一些新的列,然后进行一些分组
df['side'] = df['AoIs'].map(str).str.contains('side')
df['front'] = df['AoIs'].map(str).str.contains('front')
df['concerns_form'] = df['AoIs'].map(str).str.contains('concerns_form')
然后结束,例如:
df[df['side']==True].groupby('Name').sum()
使用过滤后的
groupby
:
target = 'front'
df[[target in x if isinstance(x,list) else False for x in df.AoIs]].groupby('Name').duration.sum()
输出:
Name
P_01 1064
使用过滤后的
groupby
:
target = 'front'
df[[target in x if isinstance(x,list) else False for x in df.AoIs]].groupby('Name').duration.sum()
输出:
Name
P_01 1064
您可以将“AoIs”列拆分为两列,然后可以按其中一列或两列进行分组。这还允许您更改分组标准
df[['Right','Left']]=df['AoIs'].str.split(',',expand=True)您可以将'AoIs'列拆分为两列,然后可以按其中一列或两列进行分组。这还允许您更改分组标准
df['Right',Left']]=df['AoIs'].str.split(',',expand=True)
from_json
应该是read_json
否?from_json
应该是read_json
否?尽管有点慢,但为所有值获取假人的一个技巧是df.AoIs.str.join('*').str.).str.get_dummies(sep='*')。astype(bool)
。然后你可以把它连接回你的原始页面。我想知道AoIs列是包含列表还是仅包含字符串。If list:man可以使用df['side']=df['AoIs'].map(lambda行:'side'在行中)虽然速度有点慢,但为所有值获取假人的一个技巧是df.AoIs.str.join('*').str.get_dummies(sep='*').astype(bool)
。然后你可以把它连接回你的原始页面。我想知道AoIs列是包含列表还是仅包含字符串。如果列表:人可以使用df['side']=df['AoIs'].map(lambda行:“side”在行中)