我有一个主数据框和三个较小的数据框。最终,我想在主数据框中创建一个新列,指示每行是否满足两个条件。
为了简单起见,我只包含了较小的数据帧之一。
data = [['Tom', 10], ['Nick', 15], ['Juli', 14], ['Tom', 7], ['Juli', 9]]
main_df = pd.DataFrame(data, columns=['A', 'B'])
A B
0 Tom 10
1 Nick 15
2 Juli 14
3 Tom 7
4 Juli 9
data1 = [[5, 'Juli'], [17, 'Tom'], [6, 'Juli'], [8,'Tom']]
df1 = pd.DataFrame(data1, columns=['AA', 'BB'])
AA BB
0 5 Juli
1 17 Tom
2 6 Juli
3 8 Tom
我希望我的最终数据框看起来像这样:
A B C
0 Tom 10 X
1 Nick 15
2 Juli 14
3 Tom 7 X
4 Juli 9 X
我尝试过合并数据帧,但它创建了太多行并超出了 python 的限制。
import pandas as pd
data = [['Tom', 10], ['Nick', 15], ['Juli', 14], ['Tom', 7], ['Juli', 9]]
main_df = pd.DataFrame(data, columns=['A', 'B'])
data1 = [[5, 'Juli'], [17, 'Tom'], [6, 'Juli'], [8,'Tom']]
df1 = pd.DataFrame(data1, columns=['AA', 'BB'])
main_df['C'] = main_df.apply(lambda row: 'X' if (row['A'] in df1['BB'].values) and any(abs(row['B'] - df1.loc[df1['BB'] == row['A']]['AA']) < 5) else '', axis=1)
print(main_df)
新的 C 列将添加到 main_df 数据框中,然后使用 apply 方法将函数应用于数据框的每一行。 lambda 函数检查当前行 A 列中的值是否出现在 df1 数据帧的 BB 列中,以及当前行 B 列中的值与 df1 数据帧 AA 列中的值之间的绝对差是否小于5. 如果两个条件都满足,则返回字符串“X”。否则,它返回一个空字符串。 axis=1 参数指定该函数应应用于数据帧的每一行。生成的序列被分配给 main_df 数据帧的 C 列。