在Pandas数据框中取一个整数并将其拆分为多行?

bwitn5fc  于 2023-03-11  发布在  其他
关注(0)|答案(2)|浏览(143)

有没有一种方法可以获取一个整数,并基于该整数将其转换为多行?
例如,要获取此DataFrame:

df = pd.DataFrame({'StringColumn': ['A', 'B', 'C'], 
                   'Integer_Column': [5,3,4],
                   'Integer_Column2': [3,2,1]})

| 字符串|整数|整数|
| - ------|- ------|- ------|
| A类|五个|三个|
| B|三个|第二章|
| C级|四个|1个|
并将其更改为:
| 字符串|整数|整数|
| - ------|- ------|- ------|
| A类|1个|1个|
| A类|1个|1个|
| A类|1个|1个|
| A类|1个|无|
| A类|1个|无|
| B|1个|1个|
| B|1个|1个|
| B|1个|无|
| C级|1个|1个|
| C级|1个|无|
| C级|1个|无|
| C级|1个|无|
我发现了如何将整数聚合在一起,并将其分组到一列中,但不是像这样拆分它。

nqwrtyyt

nqwrtyyt1#

可以使用loc + Index.repeat复制行,然后根据与groupby.cumcount的比较结果指定1或1:

(df.loc[df.index.repeat(df['Integer_Column'])]
   .assign(Integer_Column=1,
           Integer_Column2=lambda d: d.groupby(level=0).cumcount().lt(d['Integer_Column2']).astype(int))
 )

输出:

StringColumn  Integer_Column  Integer_Column2
0            A               1                1
0            A               1                1
0            A               1                1
0            A               1                0
0            A               1                0
1            B               1                1
1            B               1                1
1            B               1                0
2            C               1                1
2            C               1                0
2            C               1                0
2            C               1                0
bttbmeg0

bttbmeg02#

试试这个:

(df[['StringColumn']].join(df.select_dtypes(include = np.number)
.applymap(lambda x: [1]*x)
.stack()
.explode()
.to_frame()
.assign(cc = lambda x: x.groupby(level=[0,1]).cumcount())
.set_index('cc',append=True)[0]
.unstack(level=1)
.fillna(0)
.reset_index(level=1,drop=True)))

输出:

StringColumn  Integer_Column  Integer_Column2
0            A               1                1
0            A               1                1
0            A               1                1
0            A               1                0
0            A               1                0
1            B               1                1
1            B               1                1
1            B               1                0
2            C               1                1
2            C               1                0
2            C               1                0
2            C               1                0

相关问题