【问题标题】:pandas concat/update 3 dfs熊猫连接/更新 3 dfs
【发布时间】:2018-10-25 07:44:16
【问题描述】:

我有 3 个不同的 dfs,所有的列都有不同的列,但只有 1 个 ID。 我并不真正关心不同的数据,最后我想要的只是一个包含 ID 和另外三列的 DF,如果 ID 存在于 DF 中,每列包含 1,如果 ID 中包含 0(或没有)不存在。

一个例子:

DF1

index    irrelevant columns
A
B
C

DF2

index     irrelevant columns2
A
B
F

DF3

index    irrelevant columns3
A
F
G

最终DF

index    DF1    DF2    DF3
A         1      1      0
B         1      1      0
C         1      0      0
F         0      1      1
G         0      0      1

到目前为止,我正在做的(这在记忆方面非常糟糕)是(考虑索引 = ID)

df1['df1'] = 1
df1 = pd.DataFrame(df1['df1']) # There has to be a way around this that does not require to create a new DF
df2['df2'] = 1
df2 = pd.DataFrame(df2['df2'])
df3['df3'] = 1
df3 = pd.DataFrame(df3['df3'])
data = pd.concat([df1,df2,df3], sort=False, axis=1)

我确信必须有一种更好的方法,不需要我只用列创建新的 df,但是我尝试过的所有方法都会写入 dfs 的所有列,我不需要那个.

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    对DataFrame 构造函数和Index.to_series 使用列表推导,然后通过notna 检查非缺失值并将掩码转换为整数:

    dfs = {'DF1': DF1, 'DF2': DF2, 'DF3': DF3}
    
    comp = {k: v.index.to_series() for k, v in dfs.items()}
    df = pd.DataFrame(comp).notna().astype(int)
    

    构造函数Series 的另一个解决方案:

    comp = {k: pd.Series(1, index=v.index) for k, v in dfs.items()}
    df = pd.DataFrame(comp).fillna(0).astype(int)
    

    print (df)
       DF1  DF2  DF3
    A    1    1    1
    B    1    1    0
    C    1    0    0
    F    0    1    1
    G    0    0    1
    

    MultiLabelBinarizer 的另一种解决方案:

    dfs = {'DF1': DF1, 'DF2': DF2, 'DF3': DF3}
    
    L = [v.index for k, v in dfs.items()]
    from sklearn.preprocessing import MultiLabelBinarizer
    
    mlb = MultiLabelBinarizer()
    df = pd.DataFrame(mlb.fit_transform(L),index=list(dfs.keys())).T
    print (df)
    
       DF1  DF2  DF3
    0    1    1    1
    1    1    1    0
    2    1    0    0
    3    0    1    1
    4    0    0    1
    

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2017-08-26
      • 2019-07-28
      • 2018-07-30
      相关资源
      最近更新 更多