【问题标题】:How to iterate over a pandas dataframe and compare certain columns based on a third column?如何迭代熊猫数据框并根据第三列比较某些列?
【发布时间】:2015-06-24 13:14:47
【问题描述】:

我是 pandas 的新手,很难以方便的方式使用它的功能。

我有一个大型数据框,其中包含我想比较的两个不同测试的实验数据。理想情况下,数据显示在图中。

## what I have:
import pandas as pd

ids = [
    'Bob','Bob',
    'John', 'John',
    'Mary', 'Mary',
    ]
var = [
    'a', 'b',
    'a', 'b',
    'a', 'b',
    ]
data = [
    10,11,
    15,14,
    10,15
    ]
dataset = zip(ids, var, data)
print dataset

columns = ['ids', 'var', 'data']
df = pd.DataFrame(data = dataset, columns=columns)
print df

## what I want:
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator

fig = plt.figure()
ax1 = fig.add_subplot(111)
for i,ii in enumerate(ids):
    if var[i] == 'a':
        ax1.plot(i/2, data[i], 'rs', label='var a')
    else:
        ax1.plot((i-1)/2, data[i], 'bo', label='var b')
majorLocator = MultipleLocator(1)
ax1.xaxis.set_major_locator(majorLocator)
ax1.grid()
ax1.margins(0.05)
ax1.set_xlabel('ids')
ax1.set_ylabel('data')
ax1.legend(loc='best', numpoints=1)
fig.show()

在没有很多嵌套 for 循环的情况下如何正确执行此操作?如果我可以将 id 用作 xlabels,那将是一个加分项......

提前非常感谢, 丹尼尔

【问题讨论】:

  • 我对你想要情节显示的内容感到困惑。

标签: python pandas matplotlib data-analysis


【解决方案1】:

我不太确定您想要的最终目标是什么,但如果 cphlewis 建议使用 seaborn 不是您想要的,您可以尝试将 DataFrame 转换为多索引,然后将其绘制出来那样。

mi = pd.DataFrame(data=data,index=[ids,var],columns=['data'])
f, a = plt.subplots()
mi.plot(kind='bar',ax=a)

参考this post 也可能会有所帮助。

【讨论】:

  • 这看起来很有趣。如果现在没有,以后可能会派上用场,谢谢!
【解决方案2】:

seaborn 为你做了很多,非常灵活:

import seaborn as sns
sns.factorplot('ids', 'data', hue='var', kind='bar', data=df)

(它还重新设置了绘图默认值,可以更改或重置)。

如果要对数据进行子集化,请将子集作为 data 参数传递:

sns.factorplot('ids', 'data', hue='var', kind='bar', 
               data=df[df.isin({'ids':['Bob','Mary']}).any(1)])

  • sns 样式已关闭
  • 对于更复杂的掩码,您需要单独设置掩码;查看熊猫文档

【讨论】:

  • 这似乎正是我需要和想要的情节!现在,我该如何将它与 pandas 的数据过滤功能结合起来呢?例如,我只想绘制变量 a 和 b,而不是 c。我需要在绘图之前更改数据框吗?
  • 是的,seaborn 和 pandas 可以很好地协同工作 - 请参阅 pandas.pydata.org/pandas-docs/stable/indexing.html 了解对 df 进行子集化的许多方法。
  • (我在答案中放了一个过滤的例子)
  • 太棒了!由于您的示例,我刚刚意识到我的 Pandas 模块也已过时。
猜你喜欢
  • 1970-01-01
  • 2020-10-02
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 2020-06-12
  • 2017-03-28
相关资源
最近更新 更多