0

我想在显示计数值的现有数据框中添加一列。计数值应将给定行中的值与另一列中的所有行进行比较。

在我的示例中,我想查找整个“end_date”列中的值早于当前“start_date”列的次数。像这样将计数添加到数据框中:

        start_date   end_date   count
1       2020-09-2   2020-09-3     1
2       2020-09-6   2020-09-7     3
3       2020-09-4   2020-09-5     2
4       2020-09-1   2020-09-1     0

我努力了

df['count'] = (df[df['end_date']<df['start_date']]).count() 

但这会导致所有行的计数列都为 0,因为 start_date 总是小于任何一行中的 end_date。

4

3 回答 3

0

你想要count[i]的=次数compare[:]小于ref[i]
你做了count[:]=次数compare[i] < ref[i]

一种直接的方法是遍历行并单独计算。

for i, row in df.iterrows():
    df.at[i, 'count'] = (df['end_date'] < row['start_date']).sum()

(df['end_date'] < row[i, 'start_date'])根据条件是否满足,返回True或的列。取值为 1,取值为 0。False.sum()TrueFalse

于 2020-09-15T17:27:58.250 回答
0

您可以尝试使用外部连接

counts = (
    pd.merge(
        df[["start_date"]].assign(temp=1),
        df[["end_date"]].assign(temp=1),
        on="temp",
        how="outer",
    )
    .query("start_date>end_date")
    .groupby("start_date")
    .temp.count()
)

df = df.merge(counts, on="start_date", how="left").fillna(0, downcast="infer")

于 2020-09-15T17:36:53.680 回答
0
import pandas as pd
my_dict = {'start_date': ['2020-09-02', '2020-09-06', '2020-09-04', '2020-09-01']}
df = pd.DataFrame.from_dict(my_dict)
df['count'] = 0
for index, row in df.iterrows():
    df.at[index,'count'] = df[df['start_date'] < row['start_date']].count()[1]
print (df)
于 2020-09-15T18:01:34.710 回答