有没有办法获取一个整数并根据该整数将其转换为多行?
因此,例如,采用此 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 |
我找到了如何将整数聚合在一起并将其分组到一列而不是像这样拆分它。
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
试试这个:
(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