将函数应用于数据框,并输出单独的dfPandas

xpcnnkqh  于 2022-12-21  发布在  其他
关注(0)|答案(3)|浏览(99)

我有一个数据框

cat input.csv
dwelling,wall,weather,occ,height,temp
5,2,Ldn,Pen,154.7,23.4
5,4,Ldn,Pen,172.4,28.7
3,4,Ldn,Pen,183.5,21.2
3,4,Ldn,Pen,190.2,30.3

我试着对它应用下面的函数:

input_df = pd.read_csv('input.csv')

def folder_column(row):
    if row['dwelling'] == 5 and row['wall'] == 2:
        return 'folder1'
    elif row['dwelling'] == 3 and row['wall'] == 4:
        return 'folder2'
    else:
        return 0

我想在输入数据集上运行该函数,并将输出存储在一个单独的数据框中,如下所示:

temp_df = pd.DataFrame()
temp_df = input_df['archetype_folder'] = input_df.apply(folder_column, axis=1)

但是当我这样做的时候,我只在temp_df中得到了新创建的'archetype_folder',而我想要input_df中的所有原始列。有人能帮忙吗?注意,我不想把新列'archetype_folder'添加到原始的input_df中。

temp_df = input_df

temp_df['archetype_folder'] = temp_df.apply(folder_column, axis=1)

但是当我运行第二个命令时,input_df和temp_df都以新列结束。
任何帮助都是感激的!

4urapxun

4urapxun1#

使用Dataframe.copy

temp_df = input_df.copy()

temp_df['archetype_folder'] = temp_df.apply(folder_column, axis=1)
im9ewurl

im9ewurl2#

您需要创建原始DataFrame的 * 副本 *,然后将函数的返回值赋给它,请考虑以下简单示例

import pandas as pd
def is_odd(row):
    return row.value % 2 == 1
df1 = pd.DataFrame({"value":[1,2,3],"name":["uno","dos","tres"]})
df2 = df1.copy()
df2["odd"] = df1.apply(is_odd,axis=1)
print(df1)
print("=====")
print(df2)

给出输出

value  name
0      1   uno
1      2   dos
2      3  tres
=====
   value  name    odd
0      1   uno   True
1      2   dos  False
2      3  tres   True
mum43rcc

mum43rcc3#

您不需要apply。使用.loc可以提高效率。

temp_df = input_df.copy()
m1 = (input_df['dwelling'] == 5) & (input_df['wall'] == 2)
m2 = (input_df['dwelling'] == 3) & (input_df['wall'] == 4)
temp_df.loc[m1, 'archetype_folder'] = 'folder1'
temp_df.loc[m2, 'archetype_folder'] = 'folder2'

相关问题