小编mea*_*ory的帖子

熊猫:在第二列中两次出现之间的obs计数填充一列

说我有下面的DataFrame,它具有0/1项,具体取决于在某个月内是否发生了什么。

Y = [0,0,1,1,0,0,0,0,1,1,1]
X = pd.date_range(start = "2010", freq = "MS", periods = len(Y))

df = pd.DataFrame({'R': Y},index = X)



            R
2010-01-01  0
2010-02-01  0
2010-03-01  1
2010-04-01  1
2010-05-01  0
2010-06-01  0
2010-07-01  0
2010-08-01  0
2010-09-01  1
2010-10-01  1
2010-11-01  1
Run Code Online (Sandbox Code Playgroud)

我想要创建一个第二列,该列列出直到下一次出现1为止的月数。

也就是说,我需要:

            R  F
2010-01-01  0  2
2010-02-01  0  1
2010-03-01  1  0
2010-04-01  1  0
2010-05-01  0  4
2010-06-01  0  3
2010-07-01  0  2
2010-08-01  0  1
2010-09-01  1  0
2010-10-01  1  0
2010-11-01 …
Run Code Online (Sandbox Code Playgroud)

python pandas

9
推荐指数
1
解决办法
168
查看次数

熊猫:按日期返回发生次数

假设我有以下DataFrame

dic = {"Date": ["04-Jan-16", "04-Jan-16", "04-Jan-16", "05-Jan-16", "05-Jan-16"], 
       "Col": ['A', 'A', 'B', 'A', 'B']}

 df = pd.DataFrame(dic)

 df

  Col       Date
0   A  04-Jan-16
1   A  04-Jan-16
2   B  04-Jan-16
3   A  05-Jan-16
4   B  05-Jan-16
Run Code Online (Sandbox Code Playgroud)

我需要返回第二个DataFrame,它按日列出A和B的出现次数.即

           A  B
Date           
04-Jan-16  2  1
05-Jan-16  1  1
Run Code Online (Sandbox Code Playgroud)

我有一种感觉这涉及"groupby",但我不太了解它以使其成为上面的格式^

python group-by dataframe pandas

5
推荐指数
2
解决办法
245
查看次数

解析 Pandas DataFrame 中的日期/时间字符串

我有以下 Pandas 系列的日期/时间:

pd.DataFrame({"GMT":["13 Feb 20089:30 AM", "22 Apr 20098:30 AM", 
                    "14 Jul 20108:30 AM", "01 Jan 20118:30 AM"]})  


       GMT
13 Feb 20089:30 AM
22 Apr 20098:30 AM
14 Jul 20108:30 AM
01 Jan 20118:30 AM
Run Code Online (Sandbox Code Playgroud)

我想要的是将日期和时间部分分成两个单独的列,即

    Date         Time
13 Feb 2008     9:30 AM
22 Apr 2009     8:30 AM
14 Jul 2010     8:30 AM
01 Jan 2011     8:30 AM
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?想过简单地单独拼接每个字符串,但想知道是否有更好的解决方案将它们作为日期时间对象返回。

python pandas

4
推荐指数
1
解决办法
6043
查看次数

Pandas:按列中的观察数量扩展DataFrame

Stata具有函数expand,它将行添加到与特定列中的值对应的数据库中.例如:

我有:

df = pd.DataFrame({"A":[1, 2, 3], 
                   "B":[3,4,5]})

   A  B
0  1  3
1  2  4
2  3  5
Run Code Online (Sandbox Code Playgroud)

我需要的:

df2 = pd.DataFrame({"A":[1, 2, 3, 2, 3, 3], 
                    "B":[3,4,5, 4, 5, 5]})

   A  B
0  1  3
1  2  4
2  3  5
3  2  4
4  3  5
6  3  5
Run Code Online (Sandbox Code Playgroud)

df.loc [0,'A']中的值为1,因此没有额外的行添加到DataFrame的末尾,因为B = 3只应该发生一次.

df.loc [1,'A']中的值为2,因此在DataFrame的末尾添加了一个观察值,使B = 4的总出现次数为2.

df.loc [2,'A']中的值为3,因此将两个观察值添加到DataFrame的末尾,使得B = 5的总出现次数为3.

为了让我开始,我已经仔细研究了以前的问题,但没有运气.任何帮助表示赞赏.

python dataframe pandas

4
推荐指数
1
解决办法
838
查看次数

Python:使 matplotlib 表的列/行标签加粗

我试图弄清楚如何为我正在制作的 matplotlib 表加粗列和行标签。

我已经浏览了不同的表格属性,我可以弄清楚如何设置单个单元格的样式,但不能确定实际的列或行标签。

此外,我不知道如何加粗任何东西……只是字体大小、实际字体和颜色。

有什么帮助吗?

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

fig, axs =plt.subplots(figsize = (10,6))
clust_data = np.random.random((10,3))
collabel=("col 1", "col 2", "col 3")
axs.axis('tight')
axs.axis('off')

df = pd.DataFrame(np.random.randn(10, 4), 
                  columns=['a','b','c','d'], 
                  index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])

table = axs.table(cellText=df.values, colLabels = df.columns, rowLabels = df.index,  loc='center')

plt.show()
Run Code Online (Sandbox Code Playgroud)

编辑:

想通了,虽然它有点笨重。您可以在“celld”属性中找到列/行标签。然后,您可以使用 .set_text_props(fontproperties = FontProperties(weight = 'bold') 将其设置为粗体。即

import numpy as np
import matplotlib.pyplot as plt …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas

3
推荐指数
1
解决办法
4612
查看次数

Matplotlib:每季度次要刻度标签

我有我试图使用 Matplotlib 绘制的季度数据。我希望主要的 xtick 标签显示年份,次要的 xtick 标签显示季度。

然而,我所能找到的只是月度数据。也就是说,以下代码(使用 matplotlib 的 mdates 函数)将每月进行次要 xticks,但我没有看到季度选项...

有什么帮助吗?

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

A = pd.DataFrame(np.random.rand(6*4))
A.index = pd.date_range(start = "2017", periods = len(A), freq = "QS")

fig, ax = plt.subplots(figsize = (10,6))

ax.plot(A)

years = mdates.YearLocator()   # every year
months = mdates.MonthLocator()  # every month
yearsFmt = mdates.DateFormatter('%Y')

ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)
ax.xaxis.set_minor_locator(months)
Run Code Online (Sandbox Code Playgroud)

python datetime matplotlib pandas

3
推荐指数
1
解决办法
2068
查看次数

标签 统计

pandas ×6

python ×6

dataframe ×2

matplotlib ×2

datetime ×1

group-by ×1