【问题标题】:dataframe operations - column attributes to new columns in a new subset dataframe with conditions数据框操作 - 具有条件的新子集数据框中的新列的列属性
【发布时间】:2021-04-03 02:36:53
【问题描述】:

我有列类型、日期和金额的数据框 df1。 我的目标是使用 df1 中的日期子集创建一个 Dataframe df2,其中每种类型都有一个列,其中类型的数量作为相应日期的值。

输入数据框:
df1 =

,type,Date,amount
0,42,2017-02-01,4
1,42,2017-02-02,5
2,42,2017-02-03,7
3,42,2017-02-04,2
4,48,2017-02-01,6
5,48,2017-02-02,8
6,48,2017-02-03,3
7,48,2017-02-04,6
8,46,2017-02-01,3
9,46,2017-02-02,8
10,46,2017-02-03,3
11,46,2017-02-04,4

如果日期的子集是 2017-02-02 和 2017-02-04,则所需的输出:
df2 =

,Date,42,48,46
0,2017-02-02,5,8,8
1,2017-02-04,2,6,4

我试过这样:

types = list(df1["type"].unique())
dates = ["2017-02-02","2017-02-04"]
df2 = pd.DataFrame()
df2["Date"]=dates
for t in types:
    df2[t] = df1[(df1["type"]==t)&(df1[df1["type"]==t][["Date"]]==df2["Date"])][["amount"]]

但是使用这个解决方案我得到了很多 NaN,看来我的比较条件是错误的。 这是我得到的输出:

,Date,42,48,46
0,2017-02-02,,,
1,2017-02-04,,,

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你可以使用.pivot_table()然后过滤数据:

    df2 = df1.pivot_table(
        index="Date", columns="type", values="amount", aggfunc="sum"
    )
    dates = ["2017-02-02", "2017-02-04"]
    print(df2.loc[dates].reset_index())
    

    打印:

    type        Date  42  46  48
    0     2017-02-02   5   8   8
    1     2017-02-04   2   4   6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      • 2012-11-18
      • 2012-10-30
      • 1970-01-01
      • 2019-03-16
      相关资源
      最近更新 更多