添加指示器以通知数据来自Python的位置

添加指示器以通知数据来自Python的位置,python,pandas,concatenation,indicator,Python,Pandas,Concatenation,Indicator,非常感谢你的阅读 我有一个熊猫数据帧,它是多个较小数据帧串联的结果。我想做的是在我的最终数据框中添加多个指示符列,这样我就可以看到每一行来自哪个更小的数据框 这将是我期望的结果: Forename Surname Ind_1 Ind_2 Ind_3 Ind_4 jon smith 0 0 0 1 charlie jim 1 0 0 1

非常感谢你的阅读

我有一个熊猫数据帧,它是多个较小数据帧串联的结果。我想做的是在我的最终数据框中添加多个指示符列,这样我就可以看到每一行来自哪个更小的数据框

这将是我期望的结果:

Forename   Surname   Ind_1    Ind_2    Ind_3    Ind_4

jon          smith     0        0         0        1
charlie      jim       1        0         0        1
ian          james     0        1         0        0
例如,“Jon Smith”来自数据帧4,“Charlie Jim”来自数据帧1和4(重复行)

对于仅来自一个数据帧的行(例如第1行和第3行),我能够实现这一点,但对于来自多个数据帧的重复行(例如第2行),我无法实现这一点

非常感谢您的帮助。

您可以使用:

  • 首先使用参数
    s识别数据帧
  • 对于来自多索引的列
  • 并加入指标
  • 通过以下方式创建指标:
  • 如果需要为缺少的类别追加0列
  • 对于
    索引中的列

通过所有列使用
groupby
更通用的解决方案:

df = pd.concat(dfs, keys=inds)
print (df)
        Forename Surname
Ind_1 0  charlie     jim
Ind_2 0      ian   james
Ind_4 0  charlie     jim
      1      jon   smith

df1 =(df.reset_index()
       .groupby(df.columns.tolist())['level_0']
       .apply('|'.join)
       .str.get_dummies()
       .reindex(columns=inds, fill_value=0)
       .reset_index())

print (df1)
  Forename Surname  Ind_1  Ind_2  Ind_3  Ind_4
0  charlie     jim      1      0      0      1
1      ian   james      0      1      0      0
2      jon   smith      0      0      0      1
df = pd.concat(dfs, keys=inds)
print (df)
        Forename Surname
Ind_1 0  charlie     jim
Ind_2 0      ian   james
Ind_4 0  charlie     jim
      1      jon   smith

df1 =(df.reset_index()
       .groupby(df.columns.tolist())['level_0']
       .apply('|'.join)
       .str.get_dummies()
       .reindex(columns=inds, fill_value=0)
       .reset_index())

print (df1)
  Forename Surname  Ind_1  Ind_2  Ind_3  Ind_4
0  charlie     jim      1      0      0      1
1      ian   james      0      1      0      0
2      jon   smith      0      0      0      1