这个问题很难说。
以下是可重现示例的示例代码:
import numpy as np
import pandas as pd
df1 = pd.DataFrame([['a', 1, 10, 1], ['a', 2, 20, 1], ['b', 1, 4, 1], ['c', 1, 2, 1], ['e', 2, 10, 1]])
df2 = pd.DataFrame([['a', 1, 15, 2], ['a', 2, 20, 2], ['c', 1, 2, 2]])
df3 = pd.DataFrame([['d', 1, 10, 3], ['e', 2, 20, 3], ['f', 1, 15, 3]])
df1.columns = ['name', 'id', 'price', 'part']
df2.columns = ['name', 'id', 'price', 'part']
df3.columns = ['name', 'id', 'price', 'part']
result = pd.DataFrame([['a', 1, 10, 15, 'missing'],
['a', 2, 20, 20, 'missing'],
['b', 1, 4, 'missing', 'missing'],
['c', 1, 2, 2, 'missing'],
['e', 2, 10, 'missing', 20],
['d', 1, 'missing', 'missing', 10],
['f', 1, 'missing', 'missing', 15]])
result.columns = ['name', 'id', 'pricepart1', 'pricepart2', 'pricepart3']
所以有三个DataFrame:
df1
name id price part
0 a 1 10 1
1 a 2 20 1
2 b 1 4 1
3 c 1 2 1
4 e 2 10 1
df2
name id price part
0 a 1 15 2
1 a 2 20 2
2 c 1 2 2
df3
name id price part
0 d 1 10 3
1 e 2 20 3
2 f 1 15 3
name
和id
就像一个复合键。它可能存在于所有三个DataFrame中,只有三个DataFrame中的两个,仅存在于一个DataFrame中。为了表示name, id
来自哪个DataFrame,在part
,df1
和df2
中存在df3
列。
我正在寻找的结果是由result
DataFrame给出的。
name id pricepart1 pricepart2 pricepart3
0 a 1 10 15 missing
1 a 2 20 20 missing
2 b 1 4 missing missing
3 c 1 2 2 missing
4 e 2 10 missing 20
5 d 1 missing missing 10
6 f 1 missing missing 15
基本上,我想要每个name
,id
对被占。即使SAME name
,id
同时出现df1
和df2
,我也希望price
中的每个part
都有单独的列,即使这两个部分/ DataFrame中的价格相同。
在results
DataFrame中,取row1,a 1 10 15 missing
这代表的是,name, id
对a 1
的价格为10
的df1
,15
的df2
和missing
的df3
。
如果特定missing
的行值是pricepart
,那意味着name, id
对没有出现在那个特定的DataFrame中!
我用qazxsw poi来表示DataFrame!所以,你可以假设qazxsw poi总是在part
的part
,总是1
的df1
和2
的总是df2
。
到目前为止..我真的只是做了,3
不确定这种方法是否会导致死路一条..
请记住,原始的三个DataFrame是df3
EACH。每个DataFrame可能包含也可能不包含pd.concat([df1, df2, df3])
,62245 rows × 4 columns
对。如果name
,id
对出现在DataFrames的EVEN 1中,而不是其他的,我希望用其他DataFrames的name
来计算。
您可以在使用id
时使用missing
pd.merge