取一个整数并将其拆分为 Pandas DataFrame 中的多行?

问题描述 投票:0回答:2

有没有办法获取一个整数并根据该整数将其转换为多行?

因此,例如,采用此 DataFrame:

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

并将其更改为:

字符串 整数 整数
A 1 1
A 1 1
A 1 1
A 1 0
A 1 0
1 1
1 1
1 0
C 1 1
C 1 0
C 1 0
C 1 0

我找到了如何将整数聚合在一起并将其分组到一列而不是像这样拆分它。

python pandas dataframe integer row
2个回答
0
投票

您可以使用

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

0
投票

试试这个:

(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
© www.soinside.com 2019 - 2024. All rights reserved.