python - 循环遍历 pandas 数据框中的行并更新列条件检查
问题描述
行号 | A列 | B栏 |
---|---|---|
1 | 数据 1 | 一个 |
2 | 数据A | |
3 | 资料 B | |
4 | 数据 2 | 乙 |
5 | 数据 C | |
6 | 资料 D | |
7 | 数据 E | |
8 | 数据 3 | C |
这就是我的数据在另一个表的数据帧上更新的方式,在这个“数据 1”中,作为“数据 A”和“数据 B”的延续,并且在 B 列上只有一个数据作为“A”,但在数据帧中所有“数据 1”、“数据 A”、“数据 B”都在单独的行中创建。是否有任何操作可用于连接所有“Row_number”1、2、3 以附加在一行上并且在 columnB 中只有“A”的值?
预期输出如下:
行号 | A列 | B栏 |
---|---|---|
1 | 数据1,数据A,数据B | 一个 |
2 | 数据2,数据C,数据D,数据E | 乙 |
3 | 数据3 | C |
提前致谢
我是 python 新手,并尝试了以下代码
# variable that stores the values: table_values
import pandas as pd
df=pd.DataFrame(table_values,columns=['ColumnA','ColumnB'])
for index, row in df.iterrows():
if df.loc[index,'ColumnB'] == '' & df.loc[index,'ColumnA'] != '':
df.loc[index-1, 'ColumnA'] = df.loc[index-1, 'ColumnA'] + df.loc[index, 'ColumnA']
print(df)'''
解决方案
你可以在groupby
这里做一个。最简单的就是使用Column B
,因为它已经对应于您要分组的行。因此,鉴于此数据:
import pandas as pd
df = pd.DataFrame({'ColumnA': ['Data1', 'DataA', 'DataB',
'Data2', 'DataC', 'DataD', 'DataE',
'Data3'],
'ColumnB': ['A', None, None,
'B', None, None, None,
'C']})
# ColumnA ColumnB
# 0 Data1 A
# 1 DataA None
# 2 DataB None
# 3 Data2 B
# 4 DataC None
# 5 DataD None
# 6 DataE None
# 7 Data3 C
通过填充缺失值来创建要分组的内容:
grouper = df['ColumnB'].ffill()
# 0 A
# 1 A
# 2 A
# 3 B
# 4 B
# 5 B
# 6 B
# 7 C
# Name: ColumnB, dtype: object
然后按照这篇文章聚合到连接字符串:
output = df['ColumnA'].groupby(grouper).apply(lambda x : ', '.join(x)).reset_index()
最后结果:
ColumnB ColumnA
0 A Data1, DataA, DataB
1 B Data2, DataC, DataD, DataE
2 C Data3
推荐阅读
- javascript - 如何使用数组仅更新 MongoDB 数据库中对象的某些属性
- java - 将文件从 java 发送到 Angular 是畸形/编码数据
- javascript - 如何将代码从 Angular 1.5 更新到 Angular 5?
- javascript - CSS 动画残留像素片段
- firebase - Firebase 负载测试
- regex - 正则表达式比较字符串中的数字
- azure - Azure WebApp 配置 - 多个 VirtualApplications copyIndex 无效
- javascript - 在标记检测 A 帧 AR.JS 上播放音频
- elasticsearch - 减少 ElasticSearch 返回的数据
- angular - ngx-translate:翻译 html 中的字符串