python - 如何通过比较 Panda 数据框中的两个嵌套连续行来创建新列?
问题描述
我需要在 Panda Dataframe 中编写代码。所以:ID列中的值将依次检查它们是否相同。这里出现了三种情况。情况1:如果ID和下一行不一样,在Comment栏写成“唯一”。情况2:如果ID与下一列相同,与下一列不同,在Comment列写为“ring”。情况3:如果ID与后面的多列相同,在Comment列写为“multi”。情况 4:执行此操作,直到 ID 列中的行完成。
import pandas as pd
df = pd.read_csv('History-s.csv')
a = len(df['ID'])
c = 0
while a != 0:
c += 1
while df['ID'][i] == df['ID'][i + 1]:
if c == 2:
if df['Nod 1'][i] == df['Nod 2'][i + 1]:
df['Comment'][i] = "Ring"
df['Comment'][i + 1] = "Ring"
else:
df['Comment'][i] = "Multi"
df['Comment'][i + 1] = "Multi"
elif c > 2:
df['Comment'][i] = "Multi"
df['Comment'][i + 1] = "Multi"
i += 1
else:
df['Comment'][i] = "Unique"
a = a -1 print(df, '\n')
解决方案
从您提供的输入数据框中,我的第一印象是,当您在 while 循环中检查下一行时,您正在严格考虑下一个 comin 行,例如。
ID | 价值 | 评论 |
---|---|---|
1 | 2 | 多 |
1 | 3 | 戒指 |
3 | 4 | 独特的 |
但如果不是这样,您可以简单地使用 pandas groupby 功能。
def func(df):
if len(df)>2:
df['comment'] = 'MULTI'
elif len(df)==2:
df['comment'] = 'RING'
else:
df['comment'] = 'UNIQUE'
return df
df = df.groupby(['ID']).apply(func)
输出:
ID value comment
0 1 2 RING
1 1 3 RING
2 3 4 UNIQUE
推荐阅读
- themes - 更改 IDLE Python 的样式
- solidity - 如何访问数组的变量?
- c++ - N 的 P 次方位数之和
- c++ - 我的列表不想在 C++ 中正确转换
- wordpress - 如何强制自定义字体应用于 wordpress OceanWP 主题?
- python - 使用正则表达式查找字符串中最长的连续匹配
- javascript - Javascript函数:就地改变单个变量的值
- node.js - 我找不到有效的 Telegraf 内联查询项目
- node.js - 我安装了 node.js 而不是这个 Android Studio 显示错误。我该如何解决?
- python-3.x - 不知道用机械汤在 select_form 函数中输入什么