Python 熊猫:使用重复条目重塑数据帧
我有一个名为Python 熊猫:使用重复条目重塑数据帧,python,pandas,dataframe,reshape,Python,Pandas,Dataframe,Reshape,我有一个名为DF deathtype height deaths 0 AMS 4900 1 1 AMS 5150 1 2 AMS 5300 1 3 Avalanche 5350 14 4 Avalanche 5600 4 5 Avalanche 5700 1 6 Avalanche 58
DF
deathtype height deaths
0 AMS 4900 1
1 AMS 5150 1
2 AMS 5300 1
3 Avalanche 5350 14
4 Avalanche 5600 4
5 Avalanche 5700 1
6 Avalanche 5800 17
7 Unexplained 8500 1
8 Unexplained 8560 1
我正试图将数据重塑为以下内容:
deaths 1 4 14 17
deathtype
AMS 4900,5150,5300 0 0 0
Avalanche 5700 5600 5350 5800
Unexplained 8500, 8560 0 0 0
df.pivot_table(index='deathtype', columns='deaths', values='height', fill_value='0')
deaths 1 4 14 17
deathtype
AMS 5116.666667 0 0 0
Avalanche 5700.000000 5600 5350 5800
Unexplained 8530.000000 0 0 0
我知道pivot_表无法实现这一点,因为aggfunc使用重复值的平均值,这意味着对于所有死亡值1,将记录平均值。pivot_表给了我以下信息:
deaths 1 4 14 17
deathtype
AMS 4900,5150,5300 0 0 0
Avalanche 5700 5600 5350 5800
Unexplained 8500, 8560 0 0 0
df.pivot_table(index='deathtype', columns='deaths', values='height', fill_value='0')
deaths 1 4 14 17
deathtype
AMS 5116.666667 0 0 0
Avalanche 5700.000000 5600 5350 5800
Unexplained 8530.000000 0 0 0
我正在寻找一些关于如何着手做这件事的建议。看起来pivot_表不是正确的方法。有人能提供一些提示吗。使用groupby
和aggregate byjoin
,然后通过取消堆栈来重塑:
d = lambda x: ', '.join(x.astype(str))
df = df.groupby(['deathtype', 'deaths'])['height'].agg(d).unstack(fill_value='0')
print (df)
deaths 1 4 14 17
deathtype
AMS 4900, 5150, 5300 0 0 0
Avalanche 5700 5600 5350 5800
Unexplained 8500, 8560 0 0 0
详细信息:
print (df.groupby(['deathtype', 'deaths'])['height'].agg(lambda x: ', '.join(x.astype(str))))
deathtype deaths
AMS 1 4900, 5150, 5300
Avalanche 1 5700
4 5600
14 5350
17 5800
Unexplained 1 8500, 8560
Name: height, dtype: object
另一个解决方案包括:
耶斯雷尔-非常感谢您展示了这两种方法。这正是我所需要的。