【发布时间】: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) 不起作用,而第一个策略起作用?
- 有什么方法更正确、更快捷?
【问题讨论】:
-
这段代码非常混乱。尝试向我们展示一些示例数据,说明您想要做什么,然后展示您希望在对原始数据进行这些转换后看到的转换后数据的示例
标签: python pandas conditional-statements apply rows