繁体   English   中英

使用来自另一个 dataframe 的列的值填充列,具体取决于条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM