[英]fill column with value of a column from another dataframe, depending on conditions
我有一个看起来像这样的 dataframe(我的 COVID 病例输入数据库)
数据:
date state cases
0 20200625 NY 300
1 20200625 CA 250
2 20200625 TX 200
3 20200625 FL 100
5 20200624 NY 290
6 20200624 CA 240
7 20200624 TX 100
8 20200624 FL 80
...
值得注意的是,上述数据中的“日期”列是一个数字(不是日期时间)
我想让它成为这样的时间序列(期望的输出),日期作为索引,每个州的 COVID 案例作为列
NY CA TX FL
20200625 300 250 200 100
20200626 290 240 100 80
...
截至目前,我设法使用以下代码仅创建了 output 的架构
states = ['NY', 'CA', 'TX', 'FL']
days = [20200625, 20200626]
columns = states
positives = pd.DataFrame(columns = columns)
i = 0
for day in days:
positives.loc[i, "date"] = day
i = i +1
positives.set_index('date', inplace=True)
positives= positives.rename_axis(None)
print(positives)
返回:
NY CA TX FL
20200625.0 NaN NaN NaN NaN
20200626.0 NaN NaN NaN NaN
在以下情况下,我如何从“数据”dataframe 中获取“案例”列的值:
(i) data["state"] 中的值 = "positives" 的 header 列,
(ii) data["date"] 中的值 = "positives" 的行索引
你可以做:
df = df.set_index(['date', 'state']).unstack().reset_index()
# fix column names
df.columns = df.columns.get_level_values(1)
state CA FL NY TX
0 20200624 240.0 NaN 290.0 NaN
1 20200625 250.0 100.0 300.0 200.0
稍后,要再次设置索引,我们需要显式设置名称,请执行以下操作:
df = df.set_index("")
df.index.name = "date"
您感兴趣的转换称为 pivot。 您可以在 Pandas 中实现这一点,如下所示:
# Reproduce part of the data
data = pd.DataFrame({'date': [20200625, 20200625, 20200624, 20200624],
'state': ['NY', 'CA', 'NY', 'CA'],
'cases': [300, 250, 290, 240]})
data
# date state cases
# 0 20200625 NY 300
# 1 20200625 CA 250
# 2 20200624 NY 290
# 3 20200624 CA 240
# Pivot
data.pivot(index='date', columns='state', values='cases')
# state CA NY
# date
# 20200624 240 290
# 20200625 250 300
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.