为了账号安全,请及时绑定邮箱和手机立即绑定

使用 df.loc 放置不同行的值

使用 df.loc 放置不同行的值

暮色呼如 2021-06-06 11:13:48
我正在为这个拔头发。帮助表示赞赏。我有一个我正在处理的数据框,它部分涉及将驻留在多行上的数据合并为一行。我正在尝试使用 df.loc 来做到这一点:df.loc[df['foo'] == 1, 'Output Column'] = df.loc[df['bar'] == 2, 'Desired Column']所以我想要的是对于 'foo' = 1 的任何行,去查找 'bar' = 2 的位置并将驻留在 'Desired Column' 中的值放入原始行。本质上,这将合并行以创建更清晰的输出。以玩具为例...(编辑以显示我的代码出错的地方)这是我想要的......之前:idx   foo     bar    Desired Column    Output Column0     11             2      Hi there!2     13     6后:idx   foo     bar    Desired Column    Output Column0     1                                Hi there!1             2      Hi there!    2     1                                Hi there!3     6然而,这是我实际得到的:之前:idx   foo     bar    Desired Column    Output Column0     11             2      Hi there!2     13     6后:idx   foo     bar    Desired Column    Output Column0     1                                1             2      Hi there!         Hi there!2     1                                3     6谢谢你的帮助!
查看完整描述

2 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

嗯,这很有效……不确定它是有史以来最pythonic的解决方案,但它是这样的:

df.loc[df['foo'] == 1, 'Output Column'] = df.loc[df['bar'] == 2, 'Desired Column']
df['Output Column'] = df.groupby(['foo'])['Output Column'].transform(max)

在我的玩具示例中,这填充了对应于 bar=2 的单个数字


查看完整回答
反对 回复 2021-06-09
?
波斯汪

TA贡献1811条经验 获得超4个赞

尝试使用where:


df['Output Column']=df['Output Column'].where(df['bar']==2,'Hi There!')

print(df)

输出:


    idx   foo     bar    Desired Column    Output Column

0   0     1       NaN    NaN               Hi there!

1   1     NaN     2      Hi there!         NaN

要将 NaN 替换为'',请执行以下操作:


df=df.fillna('')

之后where。


然后:


print(df)

将:


    idx   foo     bar    Desired Column    Output Column

0   0     1                                Hi there!

1   1             2      Hi there!   

或者更不用手动操作,请执行以下操作:


df['Output Column']=df['Output Column'].where(df['bar']==2,df.loc[df['bar']==2,'Desired Column'].tolist())

print(df)

然后可以做同样的事情来替换 NaN ''


更新:

第一的:

df['Output Column']=df['Output Column'].where(df['foo']!=1,'Hi There!')

print(df)

输出:


  Desired Column Output Column  bar  foo  idx

0            NaN     Hi There!  NaN  1.0    0

1      Hi There!           NaN  2.0  NaN    1

2            NaN     Hi There!  NaN  1.0    2

3            NaN           NaN  NaN  6.0    3

第二:

df['Output Column']=df['Output Column'].where(df['foo'].notnull(),'Hi There!')

print(df)

输出:


  Desired Column Output Column  bar  foo  idx

0            NaN           NaN  NaN  1.0    0

1      Hi There!     Hi There!  2.0  NaN    1

2            NaN           NaN  NaN  1.0    2

3            NaN           NaN  NaN  6.0    3

可以做同样的事情来替换 NaN ''


查看完整回答
反对 回复 2021-06-09
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号