将函数应用于熊猫中的某些行
Posted
技术标签:
【中文标题】将函数应用于熊猫中的某些行【英文标题】:apply function to some rows in pandas 【发布时间】:2022-01-15 16:55:31 【问题描述】:我想对 pandas 数据框中的某些行进行一些更改。根据其他一些列的内容选择要更改的行。数据集很大,我还没有找到一个不是很慢的解决方案。
下面的玩具代码说明了这个问题:
import pandas as pd
def change1(s):
if s['a'] == 1:
s[['b', 'c']] = s[['c', 'b']].values
return s
def change2(s):
s[['b', 'c']] = s[['c', 'b']].values
return s
df = pd.DataFrame('a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9])
print('original:')
print(df)
df = df.apply(change1, axis = 1)
print('change1:')
print(df)
df = pd.DataFrame('a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9])
df.loc[df['a']==1,:] = df.loc[df['a']==1,:].apply(change2, axis=1)
print('change2:')
print(df)
我的问题是:
-
为什么第二个策略 (change2) 不起作用,而第一个策略起作用?
有什么方法更正确、更快捷?
【问题讨论】:
这段代码非常混乱。尝试向我们展示一些示例数据,说明您想要做什么,然后展示您希望在对原始数据进行这些转换后看到的转换后数据的示例 【参考方案1】:为什么不:
df.loc[df['a']==1, ['b','c']] = df.loc[df['a']==1,['c','b']].values
change2
不起作用,因为 df.loc[df['a']==1,:]
是基于作为视图返回的 df['a']==1
的 df 切片,因此当您从该切片中提取 ['b','c']
时,您会得到一个副本,因此分配将有对原始df没有影响。
【讨论】:
以上是关于将函数应用于熊猫中的某些行的主要内容,如果未能解决你的问题,请参考以下文章