如何根据另一个数据框架的条件创建一个新的数据框架[英] How to create a new data frame based on conditions from another data frame

本文是小编为大家收集整理的关于如何根据另一个数据框架的条件创建一个新的数据框架的处理方法,想解了如何根据另一个数据框架的条件创建一个新的数据框架的问题怎么解决?如何根据另一个数据框架的条件创建一个新的数据框架问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

刚进入Python,所以希望我在这里不要问一个愚蠢的问题...

所以我有一个名为" df_complete'的熊猫数据框架,请说100行,并包含名为:" type"," writer"," status"," statut"," col a"," col C"的列.我想创建/更新一个名为" temp_df"的新数据框,并根据条件使用" df_complete"值创建它.

temp_df = pandas.DataFrame()

if ((df_complete['type'] == 'NDD') & (df_complete['writer'] == 'Mary') & (df_complete['status'] != '7')):
    temp_df['col A'] = df_complete['col a']
    temp_df['col B'] = 'good'
    temp_df['col C'] = df_complete['col c']

但是,当我这样做时,我收到以下错误消息:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我读了这个线程,然后更改了我的"和"为"&": 系列的真实价值是模棱两可的.使用A.Empty,A.Bool(),A.Item(),A.Any()或a.all()

我还在这里阅读此线程以将所有内容都放在括号中:将dtyped [float64]数组与pandas dataframe中的标量[bool]进行比较

但是错误仍然存​​在.是什么原因造成的?我该如何修复?

**后续问题** 另外,如何获得满足条件的行的索引值?

推荐答案

我认为您需要/a> with loc 仅选择列col a和col c:

temp_df = df_complete.loc[(df_complete['type'] == 'NDD') & 
                         (df_complete['writer'] == 'Mary') & 
                         (df_complete['status'] != '7'), ['col a','col c']]
#rename columns
temp_df = temp_df.rename(columns={'col a':'col A','col c':'col C'})
#add new column 
temp_df['col B'] = 'good'
#reorder columns
temp_df = temp_df[['col A','col B','col C']]

样本:

df_complete = pd.DataFrame({'type':  ['NDD','NDD','NT'],
                            'writer':['Mary','Mary','John'],
                            'status':['4','5','6'],
                            'col a': [1,3,5],
                            'col b': [5,3,6],
                            'col c': [7,4,3]}, index=[3,4,5])

print (df_complete)
   col a  col b  col c status type writer
3      1      5      7      4  NDD   Mary
4      3      3      4      5  NDD   Mary
5      5      6      3      6   NT   John

temp_df = df_complete.loc[(df_complete['type'] == 'NDD') & 
                         (df_complete['writer'] == 'Mary') & 
                         (df_complete['status'] != '7'), ['col a','col c']]

print (temp_df)  
   col a  col c
3      1      7
4      3      4

temp_df = temp_df.rename(columns={'col a':'col A','col c':'col C'})
#add new column 
temp_df['col B'] = 'good'
#reorder columns
temp_df = temp_df[['col A','col B','col C']]
print (temp_df)  
   col A col B  col C
3      1  good      7
4      3  good      4

其他推荐答案

在当前版本的pandas中,.ix已弃用;而是使用.loc.

temp_df = df_complete.loc[]

本文地址:https://www.itbaoku.cn/post/1728083.html