我想转换到Df1下面的Df2Nan
空值将用pd.merge(df3, df1, on="id", how="left")填充。
下面是dfs的例子。
我的数据是从1到8周。
身份证是100000。
只有第8周有所有的ID,所以总行数是100000。
我有一个具有100000 id的df3,我想将df1合并到格式化为df2的df3上。
ex)df2->但是,格式化为

 Df1>
 wk, id, col1, col2  ...
 1    1   0.5  15
 2    2   0.5  15
 3    3   0.5  15
 1    2   0.5  15
 3    2   0.5  15

 ------
 Df2>
 wk1, id, col1, col2, wk2, id, col1, col2, wk3,  id, col1, col2,...
 1    1   0.5  15      2    1   Nan   Nan   3    1   Nan   Nan
 1    2   0.5  15      2    2   0.5  15     3    2   0.5    15
 1    3   Nan  Nan     2    3   Nan   Nan   3    3   0.5    15

最佳答案

使用:

#create dictionary for rename columns for correct sorting
d = dict(enumerate(df.columns))
d1 = {v:k for k, v in d.items()}

#first add missing values for each `wk` and `id`
df1 = df.set_index(['wk', 'id']).unstack().stack(dropna=False).reset_index()

#for each id create DataFrame, reshape by unstask and rename columns
df1 = (df1.groupby('id')
       .apply(lambda x: pd.DataFrame(x.values, columns=df.columns))
       .unstack()
       .reset_index(drop=True)
       .rename(columns=d1, level=0)
       .sort_index(axis=1, level=1)
       .rename(columns=d, level=0))

#convert values to integers if necessary
df1.loc[:, ['wk', 'id']] = df1.loc[:, ['wk', 'id']].astype(int)

#flatten MultiIndex in columns
df1.columns = ['{}_{}'.format(a, b) for a, b in df1.columns]
print (df1)

   wk_0  id_0  col1_0  col2_0  wk_1  id_1  col1_1  col2_1  wk_2  id_2  col1_2  \
0     1     1     0.5    15.0     2     1     NaN     NaN     3     1     NaN
1     1     2     0.5    15.0     2     2     0.5    15.0     3     2     0.5
2     1     3     NaN     NaN     2     3     NaN     NaN     3     3     0.5

   col2_2
0     NaN
1    15.0
2    15.0

关于python - 将行转换为 Pandas 数据框中的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51626281/

10-12 21:47