python pandas将某列的多字段的一行转换成多行

 python 代码实现如下

import pandas as pd
a = [['01', 'a,b,c', 5], ['02','a,b', 10], ['03', 'b,c', 20]]
data = pd.DataFrame(a, index=['user1','user2','user3'], columns=["id", "type", "num"])
print(data)

接下来,对type列分拆

data_type = data['type'].str.split(',', expand=True).stack().reset_index(level = 1,drop = True)
print(data_type)

#解析
data['type'].str.split(',', expand=True)#将type列中的数值分拆出来
data['type'].str.split(',', expand=True).stack()#将分拆的数值由行转为列
data['type'].str.split(',', expand=True).stack().reset_index(level = 1,drop = True)#将1级索引去除

将这个和原数据集合并

data_new = data.drop(['type'], axis=1).join(data_type.to_frame( name = 'type1'))
#等价于
data_new = data.drop(['type'], axis=1).join(data_type.rename('type1'))

 最后补充一个,将列转成行

data_new.groupby(['id','type1'])['num'].sum().unstack()

 Python博大精深,不断积累玩得更遛,加油,希望对学习入门python得同学们有帮助,喜欢点赞哦!

### 如何根据特定条件将 Pandas DataFrame 中的两行合并为一行 在处理数据时,有时需要按照某些逻辑或条件将多行数据压缩成单行。以下是关于如何利用 `pandas` 实现这一目标的具体方法。 #### 方法一:使用自定义函数与 `.apply()` 或 `.agg()` 可以通过编写一个聚合函数,在满足条件下对指定的数据进行运算或组合。例如: 假设有一个如下所示的 DataFrame: ```python import pandas as pd data = {'A': [1, 2], 'B': ['foo', 'bar']} df = pd.DataFrame(data) print(df) # 输出: # A B # 0 1 foo # 1 2 bar ``` 如果希望按某种方式(比如求和或者拼接字符串)将这两行合并,则可以这样做: ```python merged_row = df.agg({'A': 'sum', 'B': lambda x: ''.join(x)}).to_frame().T print(merged_row) # 输出: # A B # 0 3 foobar ``` 这里分别对数 `'A'` 应用了加法操作[^2],而对字符型 `'B'` 则应用了一个匿名函数用于连接字符串[^4]。 #### 方法二:布尔索引筛选后再合并 当存在更复杂的业务场景时,可能需要先依据一定规则选出待合并的目标行集合再做进一步加工。举个例子来说就是找到符合条件的所有记录之后再执行上述类似的汇总动作。 ```python condition = (df['A'] >= 1) & (df['A'] <= 2) filtered_df = df.loc[condition] result = filtered_df.apply(lambda row: str(row['A']) + '-' + row['B'], axis=1).str.cat(sep=',') final_result = pd.Series(result.split(','), name="Merged").to_frame() print(final_result) # 可能会得到像这样的结果: # Merged # 0 1-foo # 1 2-bar ``` 此部分代码片段展示了另一种思路——通过构造复合字段的方式完成最终呈现形式上的转换[^3]。 #### 总结说明 以上两种途径都可以有效地解决把多个独立存在的实体映射成为一个整体表示的问题,并且能够很好地适应不同的实际需求背景下的变化情况。无论是简单的算术计算还是较为繁琐的文字处理流程都能轻松应对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值