根据来自不同数据框的其他列创建新列
Create new column based on other columns from a different dataframe
我有 2 个数据帧:
df1
Time Apples Pears Grapes Peachs
10:00 3 5 5 2
11:00 1 0 2 9
12:00 20 2 7 3
df2
Class Item Factor
A Apples 3
A Peaches 2
A Pears 5
B NaN 4
我想在 df2 中创建一个名为 Total
的新列,将 df1 中位于 10:00 的项目乘以该项目的系数 - 仅当它们位于 Class A.
最终的 df 应该是这样的
df2
Class Item Factor Total
A Apples 3 9
A Peaches 2 4
A Pears 5 25
B NaN 4
这是我试过的:
df2['Total'] = df1.setIndex().cols.isin((df2.Item) and (df2.Class==A)) * df2.Factor
IIUC 这将为您提供所需的输出(这不包括来自 df2 的 np.nan,它 == b,但我认为您不想要那个)
df_melt = df1.melt(id_vars = ['Time'])
df_melt.columns = ['Time', 'Item', 'Count']
df2 = df2.loc[df2['Class'] == 'A']
df_merge = pd.merge(df2, df_melt)
df_merge['Total'] = df_merge['Factor'] * df_merge['Count']
df_merge
您可以使用 df1 作为查找 table:
df2['Total'] = df2[df2['Class']=='A'].apply(
lambda x, **kwd: df1.set_index('Time').loc[kwd['tgt_time'],x['Item']]*x['Factor'],
axis=1, tgt_time='10:00')
Class Item Factor Total
0 A Apples 3 9.0
1 A Peaches 2 4.0
2 A Pears 5 25.0
3 B NaN 4 NaN
(为了完成这项工作,我必须在 df1 中将列名称从 Peachs 更改为 Peaches)
我有 2 个数据帧:
df1
Time Apples Pears Grapes Peachs
10:00 3 5 5 2
11:00 1 0 2 9
12:00 20 2 7 3
df2
Class Item Factor
A Apples 3
A Peaches 2
A Pears 5
B NaN 4
我想在 df2 中创建一个名为 Total
的新列,将 df1 中位于 10:00 的项目乘以该项目的系数 - 仅当它们位于 Class A.
最终的 df 应该是这样的
df2
Class Item Factor Total
A Apples 3 9
A Peaches 2 4
A Pears 5 25
B NaN 4
这是我试过的:
df2['Total'] = df1.setIndex().cols.isin((df2.Item) and (df2.Class==A)) * df2.Factor
IIUC 这将为您提供所需的输出(这不包括来自 df2 的 np.nan,它 == b,但我认为您不想要那个)
df_melt = df1.melt(id_vars = ['Time'])
df_melt.columns = ['Time', 'Item', 'Count']
df2 = df2.loc[df2['Class'] == 'A']
df_merge = pd.merge(df2, df_melt)
df_merge['Total'] = df_merge['Factor'] * df_merge['Count']
df_merge
您可以使用 df1 作为查找 table:
df2['Total'] = df2[df2['Class']=='A'].apply(
lambda x, **kwd: df1.set_index('Time').loc[kwd['tgt_time'],x['Item']]*x['Factor'],
axis=1, tgt_time='10:00')
Class Item Factor Total
0 A Apples 3 9.0
1 A Peaches 2 4.0
2 A Pears 5 25.0
3 B NaN 4 NaN
(为了完成这项工作,我必须在 df1 中将列名称从 Peachs 更改为 Peaches)