Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将2个数据帧与多个条件连接,1个条件基于静态字符串_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 3.x 将2个数据帧与多个条件连接,1个条件基于静态字符串

Python 3.x 将2个数据帧与多个条件连接,1个条件基于静态字符串,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我正在寻找一个函数来解决以下问题。我有一个熊猫数据帧(df_1),看起来像这样 Model Type Amount 0 Model 1 Price 10000 1 Model 1 Tax 2000 2 Model 1 Discount 500 3 Model 2 Price 20000 4 Model 2 Tax 4000 5 Model 3 Price 50000 M

我正在寻找一个函数来解决以下问题。我有一个熊猫数据帧(df_1),看起来像这样

     Model      Type  Amount
0  Model 1     Price   10000
1  Model 1       Tax    2000
2  Model 1  Discount     500
3  Model 2     Price   20000
4  Model 2       Tax    4000
5  Model 3     Price   50000
     Model  Price   Tax Discount
0  Model 1  10000  2000      500
1  Model 2  20000  4000      NAN
2  Model 3  50000   NAN      NAN
然后,我根据df_1的唯一值创建了一个新的数据帧(df_new)

df_new = df_1.drop_duplicates(subset='Model', keep="first")

columns = ['Type', 'Amount']
df_new.drop(columns, inplace=True, axis=1)
现在,我想添加到新的数据帧。首先,我添加了更多的列。现在,我想用与Excel的vLookUp公式或index+match类似的方式填充每一列。我必须符合2个标准,来自我的df_新模型,但也有一个字符串。在我的示例中,我要匹配的字符串是“Tax”、“折扣”。。。但可能还有更多

最后,我的df_new应该是这样的

     Model      Type  Amount
0  Model 1     Price   10000
1  Model 1       Tax    2000
2  Model 1  Discount     500
3  Model 2     Price   20000
4  Model 2       Tax    4000
5  Model 3     Price   50000
     Model  Price   Tax Discount
0  Model 1  10000  2000      500
1  Model 2  20000  4000      NAN
2  Model 3  50000   NAN      NAN
如果有人能给我指出正确的方向,我将不胜感激。 非常感谢

看起来就是你想要的:

df.pivot("Model", "Type", "Amount")

Type    Discount    Price   Tax
Model           
Model 1 500.0   10000.0     2000.0
Model 2 NaN     20000.0     4000.0
Model 3 NaN     50000.0     NaN
如果您需要与上面的数据输出完全相同,则需要执行以下步骤:

(df
 .pivot("Model", "Type", "Amount")
 .reindex(df.Type.unique(), axis=1)
 .rename_axis(columns=None)
 .reset_index())

   Model    Price   Tax     Discount
0   Model 1 10000.0 2000.0  500.0
1   Model 2 20000.0 4000.0  NaN
2   Model 3 50000.0 NaN     NaN

非常感谢你。这种方法对我有效。