python - 如何根据另一列添加到熊猫列
问题描述
目前我有一张看起来像这样的桌子
ID Previous_Injuries Currently_Injured Injury_Type
1 Nan 0 Nan
1 Nan 1 Ankle
1 Nan 0 Nan
1 Nan 1 Wrist
1 Nan 0 Nan
1 Nan 1 Leg
1 Nan 0 Nan
2 Nan 1 Leg
2 Nan 0 Nan
我想添加到以前的伤害列,使我的表格看起来像这样:
ID Previous_Injuries Currently_Injured Injury_Type
1 Nan 0 Nan
1 Nan 1 Ankle
1 [Ankle] 0 Nan
1 [Ankle] 1 Wrist
1 [Ankle,Wrist] 0 Nan
1 [Ankle,Wrist] 1 Leg
1 [Ankle,Wrist,Leg] 0 Nan
2 Nan 1 Leg
2 [Leg] 0 Nan
如何在熊猫中实现这种列?最好以列表的形式进行吗?
谢谢!
解决方案
我们可以shift
使用cumsum
,然后split
是字符串,注意这里你使用的是Nan
(string type) ,它不是np.nan
s=df.Injury_Type.shift().fillna('Nan').add(',').cumsum().str[:-1].str.split(',')
df['new']=[[y for y in x if y != 'Nan'] for x in s ]
df
Out[322]:
ID Previous_Injuries Currently_Injured Injury_Type new
0 1 Nan 0 Nan []
1 1 Nan 1 Ankle []
2 1 Nan 0 Nan [Ankle]
3 1 Nan 1 Wrist [Ankle]
4 1 Nan 0 Nan [Ankle, Wrist]
5 1 Nan 1 Leg [Ankle, Wrist]
6 1 Nan 0 Nan [Ankle, Wrist, Leg]
再换个问题!
l=[]
for name , dfx in df.groupby('ID'):
s = dfx.Injury_Type.shift().fillna('Nan').add(',').cumsum().str[:-1].str.split(',')
dfx['new'] = [[y for y in x if y != 'Nan'] for x in s]
l.append(dfx)
pd.concat(l)
推荐阅读
- ruby-on-rails - 如何安排 Rails 邮件在特定日期(heroku)发送?
- c++ - 拣货问题(自定义 unProject() 函数)
- jsonata - 如果数组包含特定字符串,则返回 True - JSONata
- sql - 如何在 SQL / Snowflake 中创建列和行相同的交叉表/系数表?
- java - 需要检索触发地理围栏中心的经纬度,但Hash-Map返回null
- .net-core - Hangfire Autofac .net 核心 3.1
- javascript - 我在父节点之上添加节点,然后尝试运行布局
- javascript - 如何构建一个应用程序,让用户填写一个可以下载或通过电子邮件发送为 PDF 的表单?
- sql - OBIEE 表达式按上一个营业日期过滤
- javascript - 有人可以帮助我,并修复我的 javascript 中的动画问题吗?