假设我有一个数组(df 1),
| ID|仅限客户|市|状态|
| --|--|--|--|
| 1 |N| 0 | 0 |
| 1 |Y| 0 | 0 |
| 1 | 0 |一|B|
| 2 |N| 0 | 0 |
| 2 |Y| 0 | 0 |
| 2 | 0 |C| D|
| 2 | 0 |E| F|
| 3 |N| 0 | 0 |
| 3 |Y| 0 | 0 |
| 3 | 0 |G| H|
预期产出如下。
| ID|仅限客户|市|状态|
| --|--|--|--|
| 1 |N|一|B|
| 1 |Y|一|B|
| 2 |N| C| D|
| 2 |N| E| F|
| 2 |Y| C| D|
| 2 |Y| E| F|
| 3 |N| G| H|
| 3 |Y| G| H|
这是我的代码。
1.用np.NaN
填充州和城市列
data = {
"ID": [1,1,1,2,2,2,2,3,3,3],
"customer_only": ['N','Y',0,'N','Y',0,0,'N','Y',0],
"city": [0,0,'A',0,0,'C','E',0,0,'G'],
"state": [0,0,'B',0,0,'D','F',0,0,'H']}
df1 = pd.DataFrame(data)
df1[['city', 'state']] = df1[['city', 'state']].replace(0, np.NaN)
字符串
1.我使用bfill()
在customer_only=0的行中用city和state的值填充前面的NaN(s)。
df1[['city', 'state']] = df1[['city', 'state']].bfill()
型
1.然而,对于ID=2,bfill()
并没有给予预期的输出。我也使用了groupby()
,但它不能重塑ID=2行的维度。
有什么建议吗?
1条答案
按热度按时间bweufnob1#
您可以分别切片0/非0行,并
merge
:字符串
输出量:
型