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

我正在为这个拔头发。帮助表示赞赏。


我有一个我正在处理的数据框,它部分涉及将驻留在多行上的数据合并为一行。我正在尝试使用 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 Column

0     1

1             2      Hi there!

2     1

3     6

后:


idx   foo     bar    Desired Column    Output Column

0     1                                Hi there!

1             2      Hi there!    

2     1                                Hi there!

3     6

然而,这是我实际得到的:之前:


idx   foo     bar    Desired Column    Output Column

0     1

1             2      Hi there!

2     1

3     6

后:


idx   foo     bar    Desired Column    Output Column

0     1                                

1             2      Hi there!         Hi there!

2     1                                

3     6

谢谢你的帮助!


暮色呼如
浏览 159回答 2
2回答

牧羊人nacy

嗯,这很有效……不确定它是有史以来最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 的单个数字

波斯汪

尝试使用where:df['Output Column']=df['Output Column'].where(df['bar']==2,'Hi There!')print(df)输出:    idx   foo     bar    Desired Column    Output Column0   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 Column0   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  idx0            NaN     Hi There!  NaN  1.0    01      Hi There!           NaN  2.0  NaN    12            NaN     Hi There!  NaN  1.0    23            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  idx0            NaN           NaN  NaN  1.0    01      Hi There!     Hi There!  2.0  NaN    12            NaN           NaN  NaN  1.0    23            NaN           NaN  NaN  6.0    3可以做同样的事情来替换 NaN ''
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python