python - 在数据框的不同部分应用函数
问题描述
我需要根据这个数据框的一部分为数据库 python 应用不同的函数。每个函数创建几个列。
这是我的尝试(当然是非常简化的版本):
df=pd.DataFrame({'Type':['O','O','A'],'A':[7,9,8],'B':[8,6,5]})
def f1(df):
df['test']='A-OK'
df['test2']='A-OK2'
return df
def f2(df):
df['test']='O-OK'
df['test2']='O-OK2'
return df
def function_test(df):
df_a=df[df.Type =='A']
df_o=df[df.Type =='O']
#Applying functions
df_a=f1(df_a)
df_o=f2(df_o)
#retrieving results
df[df.Type =='A']=df_a
df[df.Type =='O']=df_o
return df
function_test(df)
数据帧 df_o 和 df_a (临时)包含很好的信息,但之后我无法将结果复制到原始 df 中。
编辑:错别字更正
解决方案
您的问题是在行中分配给切片:
df[df.Type =='A']=df_a
df[df.Type =='O']=df_o
更改行中的错字后:
df_o=f2(df_o) # instead of f1
只需返回:
pandas.concat([df_a, df_o]).sort_index()
对于输出:
A B Type test test2
0 7 8 O O-OK O-OK
1 9 6 O O-OK O-OK
2 8 5 A A-OK A-OK2
但更优化地考虑:
df['test'] = df['Type'].apply(lambda x: 'A-OK' if x == 'A' else 'O-OK')
df['test2'] = df['Type'].apply(lambda x: 'A-OK2' if x == 'A' else 'O-OK')
等等。
推荐阅读
- java - 有什么方法可以快速模拟@SpyBean 的所有方法
- android - 有没有办法将 OBS 虚拟相机流式传输到 Android 模拟器?
- c++ - C++ BucketList 类初始化
- mysql - 连接一个表中的两列并查找它没有出现在另一个表中的位置 mysql
- if-statement - 当某些东西必须位于两条线之间时会是什么情况
- pdf - 为什么将分页报表导出为 pdf 时文本会被截断?
- c# - AutoMapper 如何在 ForMember 方法中将一个类映射到另一个类
- javascript - 使用 javascript 将鼠标悬停在跨度上以使其可见
- python - 输入日期时处理错误
- java - 为什么在 JPA findAll() 方法检索的对象中,我无法访问映射为关系的字段?