我正在使用Python。我有一个数据框:
# Sample DataFrame
data = {
'sto_num': [1, 1, 1, 2, 2, 3, 3],
'sto_text': ['ab', 'ab', 'ab', 'k', 'k', 'b', 'b'],
'tu_num': [2.2, 2.6, 3.5, 1.2, 1.3, 5.2, 5.1],
'compliance': ['С', 'Н', 'Ч', 'С', 'Н', 'С', 'Ч'],
'comment': ['с1', 'н1', 'ч1', 'с2', 'н2', 'с3', 'ч3']
}
sto_num sto_text tu_num compliance comment
1 ab 2.2 С с1
-----------------------------------------------------------
1 ab 2.6 Н н1
-----------------------------------------------------------
1 ab 3.5 Ч ч1
-----------------------------------------------------------
2 k 1.2 С с2
-----------------------------------------------------------
2 k 1.3 Н н2
-----------------------------------------------------------
3 b 5.2 С с3
-----------------------------------------------------------
3 b 5.1 Ч ч3
我编写了这段代码来聚合该数据帧:
df = df.groupby('sto_num').agg({
'sto_text': 'first', # Assuming 'sto_text' is the same for each 'sto_num'
'tu_num': lambda x: '\n\n'.join(map(str, x)),
'compliance': lambda x: determine_compliance(x.tolist()),
'comment': lambda x: '\n\n'.join(map(str, x))
}).reset_index()
我想聚合它,这样 tu_num、tu_text 和某个 sto_num 组的注释不会加入到一个单元格中,而是位于数据帧的不同单元格中。所以想要的结果看起来像这样:
sto_num sto_text tu_num compliance comment
1 ab 2.2 с1
------------------------ ------------ ------------------
ab 2.6 н1
------------------------ ------------ ------------------
ab 3.5 Ч ч1
-----------------------------------------------------------
....
如何做到这一点?数据框是否可以像 Excel 那样针对不同的列具有不同的行数?
我还没有找到什么好的解决办法
如何做到这一点?数据框是否可以像 Excel 中那样针对不同的列具有不同的行数?
不,这在 Pandas 中是不可能的。
但是,您可以扩展数据框,有点像这样:
expanded_rows = []
for _, group in df.groupby('sto_num'):
for i in range(len(group)):
row = group.iloc[i].copy()
if i > 0:
row['sto_text'] = ''
expanded_rows.append(row)
expanded_df = pd.DataFrame(expanded_rows)
这将产生一个数据框,其中
sto_text
列仅填充每个 sto_num
组的第一行:
sto_num sto_text tu_num compliance comment
0 1 ab 2.2 С с1
1 1 2.6 Н н1
2 1 3.5 Ч ч1
3 2 k 1.2 С с2
4 2 1.3 Н н2
5 3 b 5.2 С с3
6 3 5.1 Ч ч3