我有一个类似这样的 DataFrame:
Key Departure Species1 Species2 Status
1 R Carlan Carlan D
1 R Scival Carex C
2 R Carlan Scival D
2 R Scival Bougra C
3 D Carlan Carlan D
3 D Scival Scival C
我想计算给定 Departure 和 Status 的每个唯一 Species1 的出现次数 D C
我想要的输出是:
Species1 RD RC DD DC
Carlan 2 NaN 1 NaN
Scival NaN 2 NaN 1
请您参考如下方法:
新建一列,是Departure和Status的组合
df['comb'] = df.Departure + df.Status
df
# Key Departure Species1 Species2 Status comb
#0 1 R Carlan Carlan D RD
#1 1 R Scival Carex C RC
#2 2 R Carlan Scival D RD
#3 2 R Scival Bougra C RC
#4 3 D Carlan Carlan D DD
#5 3 D Scival Scival C DC
然后你可以分组:
gb = df.groupby(['Species1', 'comb'])
gb.groups
#{('Carlan', 'DD'): [4],
#('Carlan', 'RD'): [0, 2],
#('Scival', 'DC'): [5],
#('Scival', 'RC'): [1, 3]}
现在将结果组织到一个列表中,其中每个元素都是一个元组 (column, Series(data, index)) 表示新数据帧中的单个数据点
items = [ (key[1], pandas.Series( [len(val)], index=[key[0]] ) )for key,val in gb.groups.items() ]
并从项目中创建一个新的数据框:
result = pandas.from_items( items)
result
# RC DC DD RD
#Carlan NaN NaN 1 2
#Scival 2 1 NaN NaN
额外信息
参见 this link有关从各种对象创建新数据框的想法。当您想从单个数据点(例如 (Species1,comb) )创建数据框时,from_items 是您的最佳选择。
