pandas统计某列某数连续出现的次数
时间: 2024-10-20 08:14:11 浏览: 4
在Pandas库中,可以使用`rolling()`函数结合`count()`方法来统计某列中特定值连续出现的次数。假设你有一个DataFrame `df`,想要计算名为`column_name`的列中某个值`target_value`连续出现的次数,你可以这样做:
```python
import pandas as pd
# 假设 df 是你的 DataFrame,column_name 是你要分析的列名,target_value 是目标值
window_size = 2 # 指定连续计数的窗口大小,例如如果想看相邻两个元素是否都等于 target_value,则 window_size 设为 2
consecutive_counts = (df[column_name] == target_value).rolling(window=window_size).sum() > 1
result = consecutive_counts.sum() - 1 # 减去1是因为第一个窗口内的计数会少一次
print(f"Target value {target_value} appears consecutively {result} times.")
```
这个代码首先创建了一个布尔序列,表示每个元素是否等于`target_value`,然后对这个序列应用滚动窗口计数,如果窗口内所有元素都为真(即都是`target_value`),则计数加一。最后减去1是为了修正首尾可能出现的“非连续”情况。
相关问题
在pandas数据表,根据”Label“列的数值进行如下操作,统计Label数值有几种,然后给每一类打上相同的数字标签,并加入pandas表中
在Pandas DataFrame中,你可以通过`value_counts()`函数首先计算"Label"列的不同值及其出现次数。这个函数会返回一个Series,其中索引是唯一的"Label"值,值是对应的计数。
例如:
```python
unique_labels = df["Label"].value_counts()
```
这将得到一个按频率排序的系列,包含了每个"Label"值及其出现的次数。接下来,为了给每一类分配一个数字标签,你可以选择从1开始递增地对索引进行编号。可以用`reset_index()`方法添加一个新的连续整数列,并将其设置为新的DataFrame的列:
```python
label_count_df = unique_labels.reset_index(drop=False)
label_count_df.insert(0, "Label_Seq", label_count_df.index + 1)
```
这里`insert(0, ..., ...)`是在原索引位置之前插入新的一列,"Label_Seq"是你新添加的列名,其值就是原始"Label"的序号。
最后,如果你想把这个新的标签序列应用回原来的DataFrame,可以使用`map()`方法将"Label_Seq"列的值映射回原DataFrame:
```python
df['New_Label'] = df['Label'].map(label_count_df.set_index('Label')['Label_Seq'])
```
现在,'New_Label'列应该包含了按照原来"Label"分类后的数字标签。
用python将两个带有多个名称的excle表格合并,并且模糊统计每个名称出现的次数
同样可以使用 pandas 库来实现这个需求。
假设两个 excel 表格的结构如下:
表格1:
| ID | 名称 |
|:----:|:-----------------|
| 1 | 名称1, 名称2 |
| 2 | 名称3, 名称4 |
| 3 | 名称1, 名称4 |
| 4 | 名称2, 名称3 |
表格2:
| ID | 名称 |
|:----:|:-----------------|
| 1 | 名称3, 名称4 |
| 2 | 名称1, 名称4 |
| 3 | 名称2, 名称3 |
| 4 | 名称1, 名称2 |
首先,使用 pandas 的 read_excel 函数读取两个 excel 表格,并将它们的名称列合并到一个 Series 对象中:
```python
import pandas as pd
# 读取两个 excel 表格
df1 = pd.read_excel('table1.xlsx')
df2 = pd.read_excel('table2.xlsx')
# 将两个表格的名称列合并到一个 Series 对象中
names = pd.concat([df1['名称'], df2['名称']])
```
接着,将 Series 对象中的多个名称拆分成单个名称,并合并到一个新的 Series 对象中:
```python
# 将多个名称拆分成单个名称,并合并到一个新的 Series 对象中
names = names.str.split(',\s*', expand=True).stack()
# 将新的 Series 对象的索引重新设置为连续的整数
names.index = names.index.droplevel(-1)
names.name = '名称'
```
然后,使用 pandas 的 str.contains 函数进行模糊匹配,并使用 value_counts 函数统计每个名称出现的次数:
```python
# 进行模糊匹配,并统计每个名称出现的次数
counts = names[names.str.contains('关键词')].value_counts()
```
其中,'关键词' 是你想要模糊匹配的关键词。
最后,将统计结果输出到一个新的 excel 表格中:
```python
# 将统计结果输出到一个新的 excel 表格中
counts.to_excel('counts.xlsx')
```
完整代码如下:
```python
import pandas as pd
# 读取两个 excel 表格
df1 = pd.read_excel('table1.xlsx')
df2 = pd.read_excel('table2.xlsx')
# 将两个表格的名称列合并到一个 Series 对象中
names = pd.concat([df1['名称'], df2['名称']])
# 将多个名称拆分成单个名称,并合并到一个新的 Series 对象中
names = names.str.split(',\s*', expand=True).stack()
# 将新的 Series 对象的索引重新设置为连续的整数
names.index = names.index.droplevel(-1)
names.name = '名称'
# 进行模糊匹配,并统计每个名称出现的次数
counts = names[names.str.contains('关键词')].value_counts()
# 将统计结果输出到一个新的 excel 表格中
counts.to_excel('counts.xlsx')
```
需要替换代码中的 'table1.xlsx'、'table2.xlsx' 和 '关键词' 为实际的表格文件名和关键词。
阅读全文