dataframe已按照“date”升序排列,如何计算每一天及前面所有日期的特征“a”的中位数,并加一列用以保存
时间: 2023-12-27 14:03:33 浏览: 82
可以使用 pandas 的 rolling 方法结合 apply 方法实现。具体的代码如下:
```python
import pandas as pd
# 假设 DataFrame 的名称为 df,特征为 "a",日期列为 "date"
df["median_a"] = df.sort_values("date").rolling(len(df), min_periods=1)["a"].apply(lambda x: x.median())
```
首先,我们使用 sort_values 方法将 DataFrame 按照日期升序排列。然后,我们使用 rolling 方法创建一个滑动窗口,大小为整个 DataFrame 的长度,即 len(df),并且设置 min_periods=1,表示即使窗口中只有一个元素,也会计算结果。最后,我们使用 apply 方法对窗口中的 "a" 特征进行中位数计算,并将结果保存到新列 "median_a" 中。
相关问题
dataframe已按照“date”升序排列每天对应两行数据,如何按照奇偶行计算每一天及前面所有日期的特征“a”的中位数(如奇数行2018-1-1则应取改天前所有日期奇数行对应的数据求中位数),并加一列用以保存
可以使用以下代码实现:
``` python
import pandas as pd
# 读取数据并按照日期升序排序
df = pd.read_csv('your_data.csv')
df = df.sort_values('date')
# 计算中位数并添加新列
median_list = []
for i in range(len(df)):
if i % 2 == 0:
# 偶数行直接跳过
continue
# 奇数行,计算该行以及前面所有日期的奇数行特征"a"的中位数
odd_rows = df.loc[0:i:2, 'a']
median = odd_rows.median()
median_list.append(median)
median_list = [None] * len(df) if len(median_list) == 0 else median_list
df['a_median'] = median_list
```
这段代码首先读取数据并按照日期升序排序,然后遍历每一行,如果是偶数行则跳过,如果是奇数行则计算该行以及前面所有日期的奇数行特征"a"的中位数,并将结果添加到一个列表中。最后将列表中的值添加到数据框中的新列'a_median'中。如果列表为空,则将新列的所有值设为None。
dataframe 按某列升序排列
DataFrame是Pandas库中常用的数据结构,它是一个二维表格,用于存储表格型数据。如果你想对DataFrame按照某一列进行升序排列,你可以使用`sort_values()`函数。这个函数可以根据指定的列名对数据进行排序。
例如,如果你有一个名为`df`的DataFrame,并且你想根据名为'column_name'的列进行升序排序(即从小到大),你可以这样做:
```python
sorted_df = df.sort_values(by='column_name', ascending=True)
```
在这里:
- `by='column_name'`指定了排序依据的列。
- `ascending=True`表示升序排列,默认情况下,如果未指定这一参数,Pandas会假设为升序。
阅读全文