![](/img/trans.png)
[英]Comparing two columns in a pandas DataFrame and filling in missing values for one of them
[英]pivot only two columns in pandas dataframe and add one of them
我有一个数据框,如:
m_id p_id coins price game_level
0 5012 26456 5120.0 15990.0 level 5
1 5012 26457 15360.0 12000.0 level 4
2 5012 26470 15360.0 8990.0 level 2
3 5012 26471 30720.0 9990.0 level 1
4 5013 26472 15360.0 4990.0 level 1
5 5013 26473 30720.0 5990.0 level 4
6 5014 26456 5120.0 15990.0 level 5
7 5014 26457 15360.0 12000.0 level 4
8 5015 26470 15360.0 8990.0 level 2
9 5015 26471 30720.0 9990.0 level 1
我想要这个 df。 (枢轴和计算列硬币和级别,以及此 m_id.p_id 的价格字段的添加,您可以删除它):
m_id coins 1 coins 2 coins 3 coins 4 price game_level 1 game_level 2 game_level 3 game_level 4
0 5012 5120.0 15360.0 15360.0 30720.0 46970 level 5 level 4 level 2 level 1
1 5013 15360.0 30720.0 0 0 10980 level 1 level 4 0 0
2 5014 5120.0 15360.0 0 0 27990 level 5 level 4 0 0
3 5015 15360.0 30720.0 0 0 16980 level 2 level 1 0 0
任何的想法?
您可以通过创建一个运行编号列然后使用groupby
和unstack
来解决这个问题。
# Create running number column for each m_id
df['running_num'] = df.groupby(['m_id']).cumcount()+1
result = (df.groupby(["m_id","running_num"])[['coins', 'game_level']]
.agg(lambda x: x)
.unstack(fill_value=0)
.reset_index())
# Rename columns
result.columns = [f"{x} {y}" if y != "" else x for x,y in result.columns]
result
m_id coins 1 coins 2 coins 3 coins 4 game_level 1 game_level 2 \
0 5012 5120.0 15360.0 15360.0 30720.0 level 5 level 4
1 5013 15360.0 30720.0 0.0 0.0 level 1 level 4
2 5014 5120.0 15360.0 0.0 0.0 level 5 level 4
3 5015 15360.0 30720.0 0.0 0.0 level 2 level 1
game_level 3 game_level 4
0 level 2 level 1
1 0 0
2 0 0
3 0 0
您可以添加价格列
result = result.merge(df.groupby(['m_id'], as_index=False).price.sum(), on='m_id')
result
m_id coins 1 coins 2 coins 3 coins 4 game_level 1 game_level 2 \
0 5012 5120.0 15360.0 15360.0 30720.0 level 5 level 4
1 5013 15360.0 30720.0 0.0 0.0 level 1 level 4
2 5014 5120.0 15360.0 0.0 0.0 level 5 level 4
3 5015 15360.0 30720.0 0.0 0.0 level 2 level 1
game_level 3 game_level 4 price
0 level 2 level 1 46970.0
1 0 0 10980.0
2 0 0 27990.0
3 0 0 18980.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.