Python 按列展开行,同时根据值操作其他行

Python 按列展开行,同时根据值操作其他行,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个数据帧: column1 column2 column3 0 a 2 2 1 b 1 0 2 c 3 2 其中第3列中的值必须是np。重复+cumcount 我认为,这是一个合并问题 s1=df.loc[df.index.repeat(df.column2),['column1']].assign(column2=1).reset_index(drop=

我有这样一个数据帧:

  column1  column2  column3
0       a        2        2
1       b        1        0
2       c        3        2
其中第3列中的值必须是
np。重复
+
cumcount


我认为,这是一个合并问题

s1=df.loc[df.index.repeat(df.column2),['column1']].assign(column2=1).reset_index(drop=True)
s2=df.loc[df.index.repeat(df.column3),['column1']].assign(column3=1).reset_index(drop=True)
df=s1.assign(Key=s1.groupby(s1.column1).cumcount()).merge(s2.assign(Key=s2.groupby(s2.column1).cumcount()),how='left').fillna(0)
df

  column1  column2  Key  column3
0       a        1    0      1.0
1       a        1    1      1.0
2       b        1    0      0.0
3       c        1    0      1.0
4       c        1    1      1.0
5       c        1    2      0.0

结果中column2是否应始终为
1
?如果column2为0的第一个数据帧中没有列,则扩展df中的所有column2值都应为1。扩展数据帧中的第2列的值不应大于1。这看起来像我想要的,让我测试几个df,然后我将标记为答案。
u = pd.DataFrame(np.repeat(df.values, df.column2, axis=0), columns=df.columns)

u.assign(
  column2=1,
  column3=(u.column3 > u.groupby('column1').cumcount()).astype(int)
)
  column1  column2  column3
0       a        1        1
1       a        1        1
2       b        1        0
3       c        1        1
4       c        1        1
5       c        1        0
s1=df.loc[df.index.repeat(df.column2),['column1']].assign(column2=1).reset_index(drop=True)
s2=df.loc[df.index.repeat(df.column3),['column1']].assign(column3=1).reset_index(drop=True)
df=s1.assign(Key=s1.groupby(s1.column1).cumcount()).merge(s2.assign(Key=s2.groupby(s2.column1).cumcount()),how='left').fillna(0)
df

  column1  column2  Key  column3
0       a        1    0      1.0
1       a        1    1      1.0
2       b        1    0      0.0
3       c        1    0      1.0
4       c        1    1      1.0
5       c        1    2      0.0