【发布时间】:2013-09-10 03:11:45
【问题描述】:
我对 python 比较陌生,但过去几周一直在虔诚地使用 Wes Kinney 的“用于数据分析的 Python”。我花了几个小时试图找出解决当前问题的方法,但我需要一些帮助。但是,我有一个数据集,其中包含本日历年发送的货物的详细信息;当我每个月都会获得新数据时,一些细节可能已经改变。我已经弄清楚如何识别发生变化的货物,以及如何识别这些变化可能是什么。
所以,假设我发现这些货物(在数据框中,原始)发生了变化:
ID Code Mode Amount From To Weight Cube Service_Date
MNO123 BBB Air 50 M1234 M9876 60 6 1-1-2013
GHI123 AAA Air 50 M1234 M9876 80 8 1-1-2013
JKL123 AAA Ship 50 M1234 M9876 70 7 1-1-2013
我已经确定了潜在的变化(在数据框中,变化):
ID Code Mode Amount From To Weight Cube Service_Date
MNO123 BBB Air 50 M1234 M9876 60 6 2-2-2013
MNO123 BBB Air 60 M1234 M9876 60 6 2-2-2013
MNO123 BBB Air 70 M1234 M1111 60 6 2-2-2013
GHI123 AAA Air 65 M1234 M9876 80 8 1-1-2013
JKL123 AAA Ship 65 M1234 M9876 70 7 1-1-2013
JKL123 AAA Ship 65 M1234 M9876 70 8 1-1-2013
我要做的就是向更改数据框中添加一个计数列,该列总计与原始数据框中相应值匹配的值的数量。因此,因为 code、mode、amount、from、to、weight 和 cube 匹配,所以 count 列在第一次观察时会得到 7 的值。类似地,但少了一个匹配值,第二个观察值的计数值为 6,第三个观察值的计数值为 5。
我要找的结果如下:
ID Code Mode Amount From To Weight Cube Service_Date Count
MNO123 BBB Air 50 M1234 M9876 60 6 2-2-2013 7
MNO123 BBB Air 60 M1234 M9876 60 6 2-2-2013 6
MNO123 BBB Air 70 M1234 M1111 60 6 2-2-2013 5
GHI123 AAA Air 65 M1234 M9876 80 8 1-1-2013 7
JKL123 AAA Ship 65 M1234 M9876 70 7 1-1-2013 7
JKL123 AAA Ship 65 M1234 M9876 70 8 1-1-2013 6
浏览了 Wes 的书和该网站上许多类似的帖子,我相信我需要使用 df.iterrows(),但我正在努力迭代这两个数据帧同时检查和计算匹配值的过程。
这是我最近的尝试:
for i in changes.iterrows():
for i in original.iterrows():
changes['count'] = 0
if changes(i) == original(i):
changes['count'] +=1
提前感谢您的时间和努力!
【问题讨论】:
-
您的代码 sn-p 将不起作用,因为在每个原始行中都会重置计数。
-
您能否举一个带有多行数据框的示例,目前尚不清楚这是否可行(就像我说的那样,您的示例代码不起作用),以及输出应该是什么成为。
-
@AndyHayden,我在两个 DataFrame 中添加了额外的行,还添加了我正在寻找的输出。让我知道是否还有什么可以帮助您帮助我的。